美文网首页
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