亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python元組拆包和具名元組解析實(shí)例詳解

系統(tǒng) 1932 0

前言

在Python中元組是一個(gè)相較于其他語(yǔ)言比較特別的一個(gè)內(nèi)置序列類型。有些python入門教程把元組成為“不可變的列表”,這種說法是不完備的,其并沒有完整的概括元組的特點(diǎn)。除了用作不可變的列表,它還可以用于沒有字段名的數(shù)據(jù)記錄。下面的內(nèi)容就圍繞元組作為數(shù)據(jù)記錄屬性展開,并介紹帶字段名的具名元組函數(shù)namedtuple,列表屬性不再本文中敘述。

元組對(duì)于數(shù)據(jù)的記錄

元組中的每個(gè)元素都存放了記錄中一個(gè)字段的數(shù)據(jù),外加這個(gè)字段的位置,正是這個(gè)位置信息給數(shù)據(jù)賦予了意義。

下面的一段代碼就演示了元組被當(dāng)作記錄來使用。如果在任何的表達(dá)式里我們?cè)谠M內(nèi)對(duì)元素排序,這些元素多攜帶的信息就會(huì)丟失,因?yàn)檫@些信息是跟它們的位置強(qiáng)關(guān)聯(lián)的。

            
#把元組作記錄
  >>> xiaoming, xiaohua = (16, 18)
  >>> xiaoming
  16
  >>> students_info = [('xiaoming', 16), ('xiaohua', 18), ('hanmeimei', 20)]
  >>> for student in students_info:
    print('%s is %d years old.'%student)
  xiaoming is 16 years old.
  xiaohua is 18 years old.
  hanmeimei is 20 years old.
  >>>
          

在這個(gè)示例中,我們把元組(16,18)里的元素分別賦值給變量xiaoming,xiaohua。同樣在for循環(huán)中,一個(gè)%運(yùn)算符就把student元組里的元素對(duì)應(yīng)到了Print函數(shù)的格式字符串空檔中。這兩個(gè)都是元組拆包的應(yīng)用。
元組拆包可以應(yīng)用到任何可迭代對(duì)象上,唯一的硬性要求是,被可迭代對(duì)象中的元素?cái)?shù)量必須要跟接受這些元素的元組的空檔數(shù)一致。除非用*來表示忽略多余的元素。

元組拆包

最好辨認(rèn)的元組拆包形式就是平行賦值 ,也就是把一個(gè)可迭代對(duì)象里的元素,一并賦值到由對(duì)應(yīng)的變量組成的元組中。例如:

            
>>> age_list = (16,18)
  >>> xiaoming, xiaohua = age_list #這里就是元組拆包
          

另一個(gè)我們熟悉的平行賦值的例子就是交換兩個(gè)變量的值:

            
>>> a, b = b, a #Python就是如此的優(yōu)雅
          

還可以用*運(yùn)算符把一個(gè)可迭代對(duì)象拆開作為函數(shù)的參數(shù):

            
>>> divmod(20,8)
  (2, 4)
  >>> t = (20, 8)
  >>> divmod(*t)
  (2, 4)
  >>> quotient, remainder = divmod(*t)
  >>> quotient, remainder
  (2, 4)
          

用*來處理剩下的元素

在Python中,函數(shù)用*args來獲取不確定數(shù)量的參數(shù)算是一種經(jīng)典寫法了。在Python3中,這個(gè)概念被擴(kuò)展到了平行賦值中:

            
>>> a, b, *rest = range(5)
  >>> a, b, rest
  (0, 1, [2, 3, 4])
  >>> a, b, *rest = range(3)
  >>> a, b, rest
  (0, 1, [2])
  >>> a, b, *rest = range(2)
  >>> a, b, rest
  (0, 1, [])
          

在平行賦值中,*運(yùn)算符前綴智能用在一個(gè)變量名前面,但是這個(gè)變量可以出現(xiàn)在賦值表達(dá)式的任意位置:

            
>>> a, *others, b, c = range(5)
  >>> a, others, b, c
  (0, [1, 2], 3, 4)
  >>> *others, a, b, c = range(5)
  >>> others, a, b, c
  ([0, 1], 2, 3, 4)
          

具名元組

在Python中,collections.namedtuple是一個(gè)工廠函數(shù),它可以用來構(gòu)建一個(gè)帶字段名的元組和一個(gè)有名字的類。
用namedtuple構(gòu)建的類的實(shí)例所消耗的內(nèi)存跟元組是一樣的,因?yàn)樽侄蚊急淮嬖趯?duì)應(yīng)的類里面。這個(gè)實(shí)例跟普通的對(duì)象實(shí)例比起來也要小一些,因?yàn)閜ython不會(huì)用 dict 來存放這些實(shí)例的屬性。

還是使用上面的小明和小華的例子來展示一下具名元組:

            
>>> from collections import namedtuple
  >>> Student = namedtuple('Student', 'name age gender')
  >>> xiaoming = Student('xiaoming', 16, 'boy')
  >>> xiaoming
  Student(name='xiaoming', age=16, gender='boy')
  >>> xiaoming.age
  16
  >>> xiaoming[2]
  'boy'
          

Student = namedtuple(‘Student', ‘name age gender'), 創(chuàng)建一個(gè)具名元組,需要兩個(gè)參數(shù),一個(gè)是類名,另一個(gè)是類的各個(gè)字段名。后者可以是有多個(gè)字符串組成的可迭代對(duì)象,或者是有空格分隔開的字段名組成的字符串(比如本示例)。具名元組可以通過字段名或者位置來獲取一個(gè)字段的信息。

具名元組的特有屬性

類屬性_fields:包含這個(gè)類所有字段名的元組

            
>>> xiaoming._fields
  ('name', 'age', 'gender')
          

類方法 _make(iterable): 接受一個(gè)可迭代對(duì)象來生產(chǎn)這個(gè)類的實(shí)例,作用等價(jià)于Student

            
(*xiaohua_info)
  >>> xiaohua_info = ('xiaohua', 18, 'girl')
  >>> xiaohua = Student._make(xiaohua_info)
  >>> xiaohua
  Student(name='xiaohua', age=18, gender='girl')
          

實(shí)例方法_asdict():把具名元組以 collections.OrdereDict 的形式返回,可以利用它來把元組里的信息友好的展示出來

            
>>> xiaohua._asdict()
  OrderedDict([('name', 'xiaohua'), ('age', 18), ('gender', 'girl')])
  >>> for key, value in xiaohua._asdict().items():
    print(key,':',value)
  name : xiaohua
  age : 18
  gender : girl
          

總結(jié)

以上所述是小編給大家介紹的Python元組拆包和具名元組解析實(shí)例詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久免费高清 | 黄色毛片视频网站 | 四虎影视网站 | 偷拍肉窝窝视频在线播放 | 91sao国产在线观看 | 亚洲在线视频 | 爱爱毛片| 欧美人zoxxxx另类 | 五月天色婷婷在线 | 天天看片夜夜爽 | 久久99亚洲精品久久久久99 | 日韩欧美综合视频 | 精品国产一区二区在线观看 | 男人资源在线 | 99久热成人精品视频 | 国产一区自拍视频 | 亚洲精品国产一区二区在线 | 色视频在线 | 在线视频综合网 | jizzjizz美女 | 国产日韩美国成人 | 爱操影院| 欧美福利在线视频 | 国产欧美日韩综合一区二区三区 | 四虎永久网站 | 激情欧美| 天天操2018 | 精品国产免费福利片 | 一区精品视频 | 亚洲一区二区三 | 久在线视频| 亚洲一级毛片在线播放 | 91在线视频播放 | 国产深夜福利19禁在线播放 | 国内精品久久影院 | 暗香影院午夜国产精品 | 色综合久久六月婷婷中文字幕 | 久久网站免费 | 欧美xxxxx毛片 | 日韩精品午夜视频一区二区三区 | 特级毛片免费观看视频 |