python 具名元組

來源:互聯網
上載者:User

標籤:欄位名   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 具名元組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.