Python每日一练0011

问题

你有一段经过下标访问列表或者元组中元素的代码,可是这样有时候会使得你的代码难以阅读, 因而你想经过名称来访问元素。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代替不常常作更新的dictcode

关于更多关于命名元组见collections.namedtuplehtm

来源

Python Cookbook资源

关注

欢迎关注个人微信公众号:python每日一练rem

相关文章
相关标签/搜索