首先讲讲什么是namedtuple。
namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代,更能够方便的通过属性名来访问数据。
在python中,传统的tuple类似于数组,只能通过下标来访问各个元素,我们还需要注释每个下标代表什么数据。通过使用namedtuple,每个元素有了自己的名字,类似于C语言中的struct,这样数据的意义就可以一目了然了。
from collections import namedtuple
User = namedtuple('User', ('name', 'age', 'sex'))
上面的代码就创建了一个User类,并且拥有3个属性name,age和sex。默认创建User类对象的时候,所有属性都需要赋值。
下面的写法会抛出异常:
# TypeError: __new__()
# missing 3 required positional arguments: 'name', 'age', and 'sex'
a = User()
print(a)
正确的写法:
a = User(name='zhe', age=21, sex='male')
print(a)
但是我们可以为每个namedtuple对象赋予默认值:
User.__new__.__defaults__ = ('zhe', 21, 'male')
这个就可以执行:
a = User()
# User(name='zhe', age=21, sex='1')
print(a)
更高级的用法,假设下面的Field类,我们需求name为必填,而required和location有默认值,则可以有如下写法:
Field = namedtuple('Field', [
'name', 'required', 'location'
])
Field.__new__.__defaults__ = (False, '')
f = Field(name='zhexiao')
print(f)