tuple的特点
tuple的不可变性(immutable),为其带来了若干特点
- 性能优于list,因为其在编译期可确定
- 线程安全
- 可哈希,能作为dict的key
namedtuple
namedtuple本质是生成一个类,其特性和__slots__
类似。
User = namedtuple("User", ["name", "age", "height"])
pprint(User)
pprint(type(User))
pprint(User.__dict__)
result
其中使用了__slots__
但是置空,是为了保证其不可变性。
3.6版本中的namedtuple()
python3.6python3.6
其使用字符串和exec的方式生成该类。
当前版本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)
现今版本中,是将定义好的方法用metaclass的方式生成。(更优雅了)
网友评论