tuple的特點
tuple的不可變性(immutable)辛掠,為其帶來了若干特點
- 性能優(yōu)于list悦冀,因為其在編譯期可確定
- 線程安全
- 可哈希履因,能作為dict的key
namedtuple
namedtuple本質(zhì)是生成一個類跪腹,其特性和__slots__
類似畏梆。
User = namedtuple("User", ["name", "age", "height"])
pprint(User)
pprint(type(User))
pprint(User.__dict__)
result
其中使用了__slots__
但是置空闸婴,是為了保證其不可變性坏挠。
3.6版本中的namedtuple()
python3.6
python3.6
其使用字符串和exec的方式生成該類。
當(dāng)前版本3.8.6及往后
class_namespace = {
'__doc__': f'{typename}({arg_list})',
'__slots__': (),
'_fields': field_names,
'_field_defaults': field_defaults,
# alternate spelling for backward compatibility
'_fields_defaults': field_defaults,
'__new__': __new__,
'_make': _make,
'_replace': _replace,
'__repr__': __repr__,
'_asdict': _asdict,
'__getnewargs__': __getnewargs__,
}
for index, name in enumerate(field_names):
doc = _sys.intern(f'Alias for field number {index}')
class_namespace[name] = _tuplegetter(index, doc)
result = type(typename, (tuple,), class_namespace)
現(xiàn)今版本中邪乍,是將定義好的方法用metaclass的方式生成降狠。(更優(yōu)雅了)