2024-06-16 09:44:14 发布
网友
Possible Duplicate:What are “named tuples” in Python?
应该使用namedtuple的情况是什么?
当我研究它时,它看起来像是一种使元组更像字典的方法。它们与字典相比如何?
只能将字典的相同哈希类型用于namedtuples吗?
元组是不可变的,无论是否命名。namedtuple只通过使用名称而不是索引,使访问更加方便。您只能对namedtuple使用有效的标识符,它不执行任何哈希-而是生成一个新类型。
namedtuple
在dicts中,只有键必须是可散列的,而不是值。namedtuple没有键,所以哈希不是问题。
dict
然而,它们有一个更严格的限制——它们的等价键“字段名”必须是字符串。
基本上,如果要创建类的一堆实例,比如:
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)
在__init__中设置属性后,不要更改这些属性,您可以使用
__init__
Container = namedtuple('Container', ['name', 'date', 'foo', 'bar']) mycontainer = Container(name, date, foo, bar)
作为替代品。
当然,您可以创建一组dict,在其中每个键中使用相同的键,但是假设您只有有效的Python标识符作为键,并且不需要可变性
mynamedtuple.fieldname
比
mydict['fieldname']
以及
mynamedtuple = MyNamedTuple(firstvalue, secondvalue)
mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}
最后,namedtuples是有序的,不像常规的dicts,因此您可以按照定义字段的顺序获取项,不像dict。
元组是不可变的,无论是否命名。
namedtuple
只通过使用名称而不是索引,使访问更加方便。您只能对namedtuple
使用有效的标识符,它不执行任何哈希-而是生成一个新类型。在
dict
s中,只有键必须是可散列的,而不是值。namedtuple
没有键,所以哈希不是问题。然而,它们有一个更严格的限制——它们的等价键“字段名”必须是字符串。
基本上,如果要创建类的一堆实例,比如:
在
__init__
中设置属性后,不要更改这些属性,您可以使用作为替代品。
当然,您可以创建一组
dict
,在其中每个键中使用相同的键,但是假设您只有有效的Python标识符作为键,并且不需要可变性比
以及
比
最后,
namedtuple
s是有序的,不像常规的dict
s,因此您可以按照定义字段的顺序获取项,不像dict
。相关问题 更多 >
编程相关推荐