標籤:欄位名 order val 通過 dict medium 擷取 接受 print
collection.namedtuple是一個工廠函數, 它可以用來構建一個帶欄位名的元組和一個有名字的類——這個帶名字的類對偵錯工具有很大協助。而且用namedtuple構建的類的執行個體所消耗的記憶體和元組是一樣的, 因為欄位名都被存在對應的類裡面。這個執行個體和消耗的對象執行個體比起來也要小一點, 因為Python不會用__dict__來存放這些屬性。
>>> from collections import namedtuple
>>> City = namedtuple(‘City‘, ‘name country population coordinates‘) ( 1 )
>>> tokyo = City(‘Tokyo‘, ‘JP‘, 36.933, (35.689722, 139.691667)) ( 2 )
>>> tokyo (‘Tokyo‘, ‘JP‘, 36.933, (35.689722, 139.691667))
>>> tokyo[1]
‘JP‘
>>> tokyo.polution
36.993
>>> tokyo.coordinates ( 3 )
(35.689722, 139.691667)
( 1 )建立一個具名元組需要兩個參數, 一個是類名, 另一個是各欄位的名字。後者可以是由數個字串組成的可迭代對象, 或者是由空格分隔開的欄位組成的字串。
( 2 )存放在對應欄位裡的資料要以一串參數的形式傳入建構函式中(元組的建構函式只接受單一的可迭代對象)
( 3 )我們可以通過欄位名或者位置資訊來擷取一個欄位資訊。
除了從普通元組那裡繼承來的屬性之外, 具名元組還有一些自己專屬的屬性。比如_fields類屬性,類方法_make(iterable)和執行個體方法_asdict()。
>>> City._fields ( 1 )(‘name‘, ‘country‘, ‘population‘, ‘coordinates‘)>>> LatLong = namedtuple(‘LatLong‘, ‘lat long‘)>>> delhi_data = (‘Delhi NCR‘, ‘IN‘, 21.935, LatLong(28.613889, 77.208889))>>> delhi = City._make(delhi_data) ( 2 )>>> delhi._asdict() ( 3 )OrderedDict([(‘name‘, ‘Delhi NCR‘), (‘country‘, ‘IN‘), (‘population‘, 21.935), (‘coordinates‘, LatLong(lat=28.613889, long=77.208889))])>>> for key, value in delhi._asdict().items():... print(key + ‘:‘, value)...name: Delhi NCRcountry: INpopulation: 21.935coordinates: LatLong(lat=28.613889, long=77.208889)>>>
( 1 )_field屬性是一個包含這個類所有欄位名稱的元組。
( 2 )用_make()通過接受一個可迭代對象來產生這個類的一個執行個體, 它的作用和City(*delhi_data)是一樣的
( 3 )_asdict()把具名元組以collection.OrderedDict的形式返回。它的第二個角色則是充當一個不可變的列表。
python 具名元組