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

相關文章
相關標籤/搜索