python 具名元組


   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 NCR country: IN population: 21.935 coordinates: LatLong(lat=28.613889, long=77.208889) >>>

 


( 1 )_field屬性是一個包含這個類所有字段名稱的元組。

( 2 )用_make()通過接受一個可迭代對象來生成這個類的一個實例, 它的作用和City(*delhi_data)是一樣的

( 3 )_asdict()把具名元組以collection.OrderedDict的形式返回。它的第二個角色則是充當一個不可變的列表。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM