python class namedtuple 效率_Python tuple & namedtuple

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.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的方式生成。(更优雅了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值