<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
原始碼解釋:
def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None): """Returns a new subclass of tuple with named fields. >>> Point = namedtuple('Point', ['x', 'y']) >>> Point.__doc__ # docstring for the new class 'Point(x, y)' >>> p = Point(11, y=22) # instantiate with positional args or keywords >>> p[0] + p[1] # indexable like a plain tuple 33 >>> x, y = p # unpack like a regular tuple >>> x, y (11, 22) >>> p.x + p.y # fields also accessible by name 33 >>> d = p._asdict() # convert to a dictionary >>> d['x'] 11 >>> Point(**d) # convert from a dictionary Point(x=11, y=22) >>> p._replace(x=100) # _replace() is like str.replace() but targets named fields Point(x=100, y=22) """
語法結構:
namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
命名元組,使得元組可像列表一樣使用key存取(同時可以使用索引存取)。
collections.namedtuple 是一個工廠函數,它可以用來構建一個帶欄位名的元組和一個有名字的類.
建立一個具名元組需要兩個引數,一個是類名,另一個是類的各個欄位的名字。
存放在對應欄位裡的資料要以一串引數的形式傳入到建構函式中(注意,元組的建構函式卻只接受單一的可迭代物件)。
命名元組還有一些自己專有的屬性。最有用的:類屬性_fields、類方法 _make(iterable)和實體方法_asdict()。
範例程式碼1:
from collections import namedtuple # 定義一個命名元祖city,City類,有name/country/population/coordinates四個欄位 city = namedtuple('City', 'name country population coordinates') tokyo = city('Tokyo', 'JP', 36.933, (35.689, 139.69)) print(tokyo) # _fields 類屬性,返回一個包含這個類所有欄位名稱的元組 print(city._fields) # 定義一個命名元祖latLong,LatLong類,有lat/long兩個欄位 latLong = namedtuple('LatLong', 'lat long') delhi_data = ('Delhi NCR', 'IN', 21.935, latLong(28.618, 77.208)) # 用 _make() 通過接受一個可迭代物件來生成這個類的一個範例,作用跟City(*delhi_data)相同 delhi = city._make(delhi_data) # _asdict() 把具名元組以 collections.OrderedDict 的形式返回,可以利用它來把元組裡的資訊友好地呈現出來。 print(delhi._asdict())
執行結果:
範例程式碼2:
from collections import namedtuple Person = namedtuple('Person', ['age', 'height', 'name']) data2 = [Person(10, 1.4, 'xiaoming'), Person(12, 1.5, 'xiaohong')] print(data2) res = data2[0].age print(res) res2 = data2[1].name print(res2)
執行結果:
範例程式碼3:
from collections import namedtuple card = namedtuple('Card', ['rank', 'suit']) # 定義一個命名元祖card,Card類,有rank和suit兩個欄位 class FrenchDeck(object): ranks = [str(n) for n in range(2, 5)] + list('XYZ') suits = 'AA BB CC DD'.split() # 生成一個列表,用空格將字串分隔成列表 def __init__(self): # 生成一個命名元組組成的列表,將suits、ranks兩個列表的元素分別作為命名元組rank、suit的值。 self._cards = [card(rank, suit) for suit in self.suits for rank in self.ranks] print(self._cards) # 獲取列表的長度 def __len__(self): return len(self._cards) # 根據索引取值 def __getitem__(self, item): return self._cards[item] f = FrenchDeck() print(f.__len__()) print(f.__getitem__(3))
執行結果:
範例程式碼4:
from collections import namedtuple person = namedtuple('Person', ['first_name', 'last_name']) p1 = person('san', 'zhang') print(p1) print('first item is:', (p1.first_name, p1[0])) print('second item is', (p1.last_name, p1[1]))
執行結果:
範例程式碼5: 【_make 從存在的序列或迭代建立範例】
from collections import namedtuple course = namedtuple('Course', ['course_name', 'classroom', 'teacher', 'course_data']) math = course('math', 'ERB001', 'Xiaoming', '09-Feb') print(math) print(math.course_name, math.course_data) course_list = [ ('computer_science', 'CS001', 'Jack_ma', 'Monday'), ('EE', 'EE001', 'Dr.han', 'Friday'), ('Pyhsics', 'EE001', 'Prof.Chen', 'None') ] for k in course_list: course_i = course._make(k) print(course_i)
執行結果:
範例程式碼6: 【_asdict 返回一個新的ordereddict,將欄位名稱對映到對應的值】
from collections import namedtuple person = namedtuple('Person', ['first_name', 'last_name']) zhang_san = ('Zhang', 'San') p = person._make(zhang_san) print(p) # 返回的型別不是dict,而是orderedDict print(p._asdict())
執行結果:
範例程式碼7: 【_replace 返回一個新的範例,並將指定域替換為新的值】
from collections import namedtuple person = namedtuple('Person', ['first_name', 'last_name']) zhang_san = ('Zhang', 'San') p = person._make(zhang_san) print(p) p_replace = p._replace(first_name='Wang') print(p_replace) print(p) p_replace2 = p_replace._replace(first_name='Dong') print(p_replace2)
執行結果:
範例程式碼8: 【_fields 返回欄位名】
from collections import namedtuple person = namedtuple('Person', ['first_name', 'last_name']) zhang_san = ('Zhang', 'San') p = person._make(zhang_san) print(p) print(p._fields)
執行結果:
範例程式碼9: 【利用fields可以將兩個namedtuple組合在一起】
from collections import namedtuple person = namedtuple('Person', ['first_name', 'last_name']) print(person._fields) degree = namedtuple('Degree', 'major degree_class') print(degree._fields) person_with_degree = namedtuple('person_with_degree', person._fields + degree._fields) print(person_with_degree._fields) zhang_san = person_with_degree('san', 'zhang', 'cs', 'master') print(zhang_san)
執行結果:
範例程式碼10: 【field_defaults】
from collections import namedtuple person = namedtuple('Person', ['first_name', 'last_name'], defaults=['san']) print(person._fields) print(person._field_defaults) print(person('zhang')) print(person('Li', 'si'))
執行結果:
範例程式碼11: 【namedtuple是一個類,所以可以通過子類更改功能】
from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(4, 5) print(p) class Point(namedtuple('Point', ['x', 'y'])): __slots__ = () @property def hypot(self): return self.x + self.y def hypot2(self): return self.x + self.y def __str__(self): return 'result is %.3f' % (self.x + self.y) aa = Point(4, 5) print(aa) print(aa.hypot) print(aa.hypot2)
執行結果:
範例程式碼12: 【注意觀察兩種寫法的不同】
from collections import namedtuple Point = namedtuple("Point", ["x", "y"]) p = Point(11, 22) print(p) print(p.x, p.y) # namedtuple本質上等於下面寫法 class Point2(object): def __init__(self, x, y): self.x = x self.y = y o = Point2(33, 44) print(o) print(o.x, o.y)
執行結果:
到此這篇關於python中namedtuple函數的用法解析的文章就介紹到這了,更多相關python namedtuple內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45