En dict
s, solo las claves tienen que ser transitables, no los valores. namedtuple
s no tienen llaves, por lo que la capacidad de transferencia no es un problema.
Sin embargo, tienen una restricción más estricta: sus equivalentes clave, "nombres de campo", tienen que ser cadenas.
Básicamente, si se va a crear un montón de instancias de una clase como:
class Container:
def __init__(self, name, date, foo, bar):
self.name = name
self.date = date
self.foo = foo
self.bar = bar
mycontainer = Container(name, date, foo, bar)
y no cambia los atributos de una vez establecidos en __init__
, se puede utilizar en lugar
Container = namedtuple('Container', ['name', 'date', 'foo', 'bar'])
mycontainer = Container(name, date, foo, bar)
como reemplazo.
Por supuesto, se podría crear un montón de dict
s donde se utilizó el mismo claves en cada uno, pero suponiendo que sólo tendrá identificadores Python válidos como llaves y no necesita mutabilidad,
mynamedtuple.fieldname
es más bonita que
mydict['fieldname']
y
mynamedtuple = MyNamedTuple(firstvalue, secondvalue)
es más bonita que
mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}
Por último, namedtuple
s están ordenados, a diferencia regulares dict
s, por lo que obtener los elementos en el orden definido por los campos, a diferencia de un dict
.
Eche un vistazo a esta pregunta - http://stackoverflow.com/questions/2970608/what-are-named-tuples-in-python – ronakg
Esto no es un duplicado de [la pregunta mencionada arriba] (https://stackoverflow.com/questions/2970608/what-are-named-tuples-in-python). Los dos son complementarios. – Dennis