Python每日一練0011

2021-09-24 07:23:04 字數 1390 閱讀 6754

你有一段通過下標訪問列表或者元組中元素的**,但是這樣有時候會使得你的**難以閱讀, 於是你想通過名稱來訪問元素。

使用collections.namedtuple函式,例如我們經常使用乙個tuple表示乙個座標點的時候

>>> 

from collections import namedtuple

>>> point = namedtuple('point', ['x', 'y'])

>>> point_1 = point(x=5, y=6)

>>> print(point_1.x, point_1.y)56

複製**

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 "", line 1, in 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會讓**可讀性更好,例如從資料庫呼叫中返回了乙個很大的元組列表,如果通過下標去操作其中的元素會讓**模糊不清

並且在某些時候可以更節省資源(比如用namedtuple代替不經常做更新的dict

關於更多關於命名元組見collections.namedtuple

python cookbook

python每日一練

人生苦短,我用python 2018.6.5 有個目錄,裡面是你自己寫過的程式,統計一下你寫過多少行 包括空行和注釋,但是要分別列出來 coding utf 8 import re import glob defcodecolletion path filelist glob.glob path p...

Python每日一練

人生苦短,我用python 2018.6.13 最近事情有點多,有幾天沒寫了,正好最近需要統計一下各組排名,也就拿python代替手工了 各組給出其他組的排名,統計每個組最終的得分,第一名為0.5,第二名0.4,以此類推。coding utf 8 groups 3,2,5,4,6 1,3,5,6,4...

Python每日一練0002

如何序列化輸出元素包含字串元組的字串元組 好繞 舉個例子 zoo1 monkey elephant zoo2 python zoo1 將zoo2輸出為python,monkey,elephant容易想到使用join 函式,但join 函式要求元素必須都是字串型別,否則會丟擲typeerror錯誤 z...