美文网首页
Python tuple & namedtuple

Python tuple & namedtuple

作者: Gascognya | 来源:发表于2020-10-30 15:56 被阅读0次

tuple的特点

tuple的不可变性(immutable),为其带来了若干特点

  1. 性能优于list,因为其在编译期可确定
  2. 线程安全
  3. 可哈希,能作为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.6
python3.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的方式生成。(更优雅了)

相关文章

网友评论

      本文标题:Python tuple & namedtuple

      本文链接:https://www.haomeiwen.com/subject/ywddvktx.html