你有一段经过下标访问列表或者元组中元素的代码,可是这样有时候会使得你的代码难以阅读, 因而你想经过名称来访问元素。html
使用collections.namedtuple
函数,例如咱们常常使用一个tuple
表示一个坐标点的时候python
>>> from collections import namedtuple >>> Point = namedtuple('Point', ['x', 'y']) >>> point_1 = Point(x=5, y=6) >>> print(point_1.x, point_1.y) 5 6
collections.namedtuple
函数返回的是tuple
类型的一个子类,可以支持原生tuple
的全部操做数据库
但须要注意的是,当建立了一个namedtuple
后,成员是不能被改变的(这和原生tuple
是一致的)微信
>>> from collections import namedtuple >>> Point = namedtuple('Point', ['x', 'y']) >>> point_1 = Point(x=5, y=6) >>> point_1.x = 6 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: can't set attribute
若是想要修改某一成员,只能从新建立一个实例了,可使用_replace
方法函数
>>> from collections import namedtuple >>> Point = namedtuple('Point', ['x', 'y']) >>> point_1 = Point(x=5, y=6) >>> point_2 = point_1._replace(x=6) >>> print(point_2) Point(x=6, y=6)
适当使用namedtuple
会让代码可读性更好,例如从数据库调用中返回了一个很大的元组列表,若是经过下标去操做其中的元素会让代码模糊不清spa
而且在某些时候能够更节省资源(好比用namedtuple
代替不常常作更新的dict
)code
关于更多关于命名元组见collections.namedtuplehtm
Python Cookbook资源
欢迎关注个人微信公众号:python每日一练rem