你有一段經過下標訪問列表或者元組中元素的代碼,可是這樣有時候會使得你的代碼難以閱讀, 因而你想經過名稱來訪問元素。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