欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python筆記004-元組的拆包和命名元組

系統(tǒng) 1650 0

Python筆記004-元組的拆包和命名元組

以下是我學(xué)習(xí)《流暢的Python》后的個(gè)人筆記,現(xiàn)在拿出來(lái)和大家共享,希望能幫到各位Python學(xué)習(xí)者。

首次發(fā)表于: 微信公眾號(hào):科技老丁哥,ID: TechDing,敬請(qǐng)關(guān)注。

本篇主要知識(shí)點(diǎn):

  1. 元組的拆包就是將元組內(nèi)部的每個(gè)元素按照位置一一對(duì)應(yīng)的賦值給不同變量,可以應(yīng)用到變量賦值,函數(shù)參數(shù)賦值,獲取元組中特定位置的元素值等場(chǎng)合。

  2. namedtuple: 用于存儲(chǔ)對(duì)象序列,不能改變?cè)刂担梢韵馾ict一樣通過(guò)名字進(jìn)行訪(fǎng)問(wèn),可以通過(guò)_asdict()轉(zhuǎn)換為dict,其作用相當(dāng)于只有屬性沒(méi)有方法的類(lèi)。

1. 元組的拆包

Python中的元組tuple和列表list類(lèi)似,不同之處在于元組的元素不能修改,所以被經(jīng)常稱(chēng)為不可變列表,在形式上,元組用小括號(hào)()表示,而列表用中括號(hào)[]表示。

元組的拆包就是將元組內(nèi)部的每個(gè)元素按照位置一一對(duì)應(yīng)的賦值給不同變量,比如:

            
              tupleA
              
                =
              
              
                (
              
              
                10
              
              
                ,
              
              
                20.5
              
              
                )
              
              
first
              
                ,
              
              second
              
                =
              
              tupleA 
              
                # 對(duì)二元素元組拆包
              
              
                print
              
              
                (
              
              first
              
                )
              
              
                # 10
              
              
                print
              
              
                (
              
              second
              
                )
              
              
                # 20.5
              
              

a
              
                ,
              
              b
              
                ,
              
              c
              
                ,
              
              d
              
                =
              
              
                (
              
              
                'A'
              
              
                ,
              
              
                20.15
              
              
                ,
              
              
                2019
              
              
                ,
              
              
                '10:15:14'
              
              
                )
              
              
                # 多元素元組的拆包
              
              
                print
              
              
                (
              
              a
              
                )
              
              
                # A
              
              
                print
              
              
                (
              
              b
              
                )
              
              
                # 20.15
              
              
                print
              
              
                (
              
              c
              
                )
              
              
                # 2019
              
              
                print
              
              
                (
              
              d
              
                )
              
              
                # 10:15:14
              
            
          

如果拆包應(yīng)用于上面的簡(jiǎn)單賦值,那倒是沒(méi)什么新奇之處。拆包其實(shí)被經(jīng)常用于給函數(shù)的參數(shù)賦值,比如:

            
              
                def
              
              
                func1
              
              
                (
              
              a
              
                ,
              
              b
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                'a: '
              
              
                ,
              
              a
              
                ,
              
              
                'b: '
              
              
                ,
              
              b
              
                )
              
              
tupleA
              
                =
              
              
                (
              
              
                10
              
              
                ,
              
              
                20.5
              
              
                )
              
              
func1
              
                (
              
              
                *
              
              tupleA
              
                )
              
              
                # 拆包后作為函數(shù)的參數(shù),a:  10 b:  20.5
              
            
          

另外一種拆包的應(yīng)用場(chǎng)景是,某些函數(shù)返回一個(gè)tuple,而我們需要對(duì)其進(jìn)行拆包,比如:

            
              
                def
              
              
                func2
              
              
                (
              
              x
              
                )
              
              
                :
              
              
                return
              
              
                (
              
              x
              
                ,
              
              x
              
                *
              
              
                2
              
              
                ,
              
              x
              
                *
              
              x
              
                )
              
              
data1
              
                ,
              
              data2
              
                ,
              
              data3
              
                =
              
              func2
              
                (
              
              
                3
              
              
                )
              
              
                print
              
              
                (
              
              data1
              
                )
              
              
                # 3
              
              
                print
              
              
                (
              
              data2
              
                )
              
              
                # 6
              
              
                print
              
              
                (
              
              data3
              
                )
              
              
                # 9
              
            
          

在拆包時(shí),有的元素不是我們所需要的,那就用占位符來(lái)代替,即用_代表一個(gè)占位符,而*代表多個(gè)占位符

            
              data1
              
                ,
              
              _
              
                ,
              
              data3
              
                =
              
              func2
              
                (
              
              
                3
              
              
                )
              
              
                # 用_代表一個(gè)變量
              
              
                print
              
              
                (
              
              data1
              
                )
              
              
                # 3
              
              
data1
              
                ,
              
              
                *
              
              rest
              
                =
              
              func2
              
                (
              
              
                3
              
              
                )
              
              
                print
              
              
                (
              
              data1
              
                )
              
              
                # 3
              
              
                print
              
              
                (
              
              rest
              
                )
              
              
                # [6,9]
              
            
          

嵌套元組,顧名思義是元組中包含有元組,對(duì)其進(jìn)行拆包和普通元組的拆包類(lèi)似。

            
              areas
              
                =
              
              
                [
              
              
                (
              
              
                'hubei'
              
              
                ,
              
              
                'wuhan'
              
              
                ,
              
              
                1200
              
              
                ,
              
              
                (
              
              
                150
              
              
                ,
              
              
                260
              
              
                )
              
              
                )
              
              
                ,
              
              
                (
              
              
                'hunan'
              
              
                ,
              
              
                'changsha'
              
              
                ,
              
              
                3600
              
              
                ,
              
              
                (
              
              
                100
              
              
                ,
              
              
                200
              
              
                )
              
              
                )
              
              
                ,
              
              
                (
              
              
                'shandong'
              
              
                ,
              
              
                'jinan'
              
              
                ,
              
              
                800
              
              
                ,
              
              
                (
              
              
                260
              
              
                ,
              
              
                180
              
              
                )
              
              
                )
              
              
                ]
              
              
                for
              
               province
              
                ,
              
              city
              
                ,
              
              data1
              
                ,
              
              
                (
              
              data2
              
                ,
              
              data3
              
                )
              
              
                in
              
               areas
              
                :
              
              
                print
              
              
                (
              
              
                'P:{}, C:{}, data2:{},data3:{}'
              
              
                .
              
              
                format
              
              
                (
              
              province
              
                ,
              
              city
              
                ,
              
              data2
              
                ,
              
              data3
              
                )
              
              
                )
              
            
          

2. 命名元組

命名元組(namedtuple)類(lèi)似于tuple,都可以用于存儲(chǔ)對(duì)象序列,但是它比tuple更加強(qiáng)大,除了延續(xù)tuple不能改變?cè)刂颠@一特性之外,還有其本身的特點(diǎn),比如可以像dict一樣通過(guò)名字訪(fǎng)問(wèn)元素值,還可以通過(guò)_asdict()轉(zhuǎn)換為dict類(lèi)型。

命名元組可以構(gòu)建一個(gè)帶有字段名的元組和一個(gè)有名字的類(lèi),其消耗的內(nèi)存和元組是一樣的。

在面向?qū)ο蟮乃枷胂拢绻覀冃枰獦?gòu)建一個(gè)簡(jiǎn)單的類(lèi),只是用于存儲(chǔ)幾個(gè)簡(jiǎn)單的屬性,而沒(méi)有具體的方法,我們可以寫(xiě)成:

            
              
                class
              
              
                PersonCls
              
              
                :
              
              
                # 定義一個(gè)類(lèi),只有屬性,沒(méi)有具體的方法,用于存儲(chǔ)某些屬性值
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
              name
              
                ,
              
              age
              
                ,
              
              score
              
                )
              
              
                :
              
              
        self
              
                .
              
              name
              
                =
              
              name
        self
              
                .
              
              age
              
                =
              
              age
        self
              
                .
              
              score
              
                =
              
              score
    
              
                def
              
              
                __repr__
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
              
                'PersonCls(name={},age={},score={})'
              
              
                .
              
              
                format
              
              
                (
              
              self
              
                .
              
              name
              
                ,
              
              self
              
                .
              
              age
              
                ,
              
              self
              
                .
              
              score
              
                )
              
              

PC1
              
                =
              
              PersonCls
              
                (
              
              
                'Jack'
              
              
                ,
              
              
                20
              
              
                ,
              
              
                85
              
              
                )
              
              
PC2
              
                =
              
              PersonCls
              
                (
              
              
                'Rose'
              
              
                ,
              
              
                18
              
              
                ,
              
              
                92
              
              
                )
              
              
                print
              
              
                (
              
              PC1
              
                )
              
              
                # PersonCls(name=Jack,age=20,score=85)
              
              
                print
              
              
                (
              
              PC2
              
                )
              
              
                # PersonCls(name=Rose,age=18,score=92)
              
              
                print
              
              
                (
              
              PC1
              
                .
              
              age
              
                )
              
              
                # 20
              
              
                print
              
              
                (
              
              PC2
              
                .
              
              score
              
                )
              
              
                # 92
              
            
          

這樣的寫(xiě)法是可行的,但不是Python風(fēng)格,對(duì)這種情況,完全可以交給namedtuple來(lái)做,比如,在python里面的寫(xiě)法為:

            
              
                from
              
               collections 
              
                import
              
               namedtuple
Person
              
                =
              
              namedtuple
              
                (
              
              
                'Person'
              
              
                ,
              
              
                [
              
              
                'name'
              
              
                ,
              
              
                'age'
              
              
                ,
              
              
                'score'
              
              
                ]
              
              
                )
              
              
                # 構(gòu)造一個(gè)namedtuple類(lèi)
              
              

P1
              
                =
              
              Person
              
                (
              
              
                'Jack'
              
              
                ,
              
              
                20
              
              
                ,
              
              
                85
              
              
                )
              
              
                # 構(gòu)建具體的實(shí)例,其賦值順序要一一對(duì)應(yīng)
              
              
P2
              
                =
              
              Person
              
                (
              
              age
              
                =
              
              
                18
              
              
                ,
              
              name
              
                =
              
              
                'Rose'
              
              
                ,
              
              score
              
                =
              
              
                92
              
              
                )
              
              
                # 如果指定變量名,順序不用一一對(duì)應(yīng)
              
              
                print
              
              
                (
              
              P1
              
                )
              
              
                # Person(name='Jack', age=20, score=85)
              
              
                print
              
              
                (
              
              P2
              
                )
              
              
                # Person(name='Rose', age=18, score=92)
              
              
                print
              
              
                (
              
              P1
              
                .
              
              age
              
                )
              
              
                # 可以像dict一樣通過(guò)屬性名進(jìn)行訪(fǎng)問(wèn)
              
              
                print
              
              
                (
              
              P2
              
                .
              
              score
              
                )
              
              
                # 92
              
            
          

上面的 Person=namedtuple('Person',['name', 'age', 'score']) 就相當(dāng)于構(gòu)建一個(gè)只有屬性沒(méi)有方法的Person類(lèi),其屬性為:‘name’, ‘a(chǎn)ge’, ‘score’,代碼更加簡(jiǎn)單,且更有Python味兒。在內(nèi)存上來(lái)說(shuō),會(huì)比定義一個(gè)類(lèi)要小一些,因?yàn)榇藭r(shí)不需要用 __dict__ 來(lái)存放實(shí)例的屬性。

命名元組除了從tuple繼承來(lái)的屬性之外,還有其專(zhuān)有屬性,最常用的是 _fields, _make(), _asdict() 。如下:

            
              
                # namedtuple專(zhuān)有屬性:
              
              
                from
              
               collections 
              
                import
              
               namedtuple
Person
              
                =
              
              namedtuple
              
                (
              
              
                'Person'
              
              
                ,
              
              
                [
              
              
                'name'
              
              
                ,
              
              
                'age'
              
              
                ,
              
              
                'score'
              
              
                ]
              
              
                )
              
              
                print
              
              
                (
              
              Person
              
                .
              
              _fields
              
                )
              
              
                # ('name', 'age', 'score')
              
              
                # _fields屬性是一個(gè)包含這個(gè)類(lèi)所有屬性名稱(chēng)的tuple
              
              

person1
              
                =
              
              
                (
              
              
                'zhangsan'
              
              
                ,
              
              
                25
              
              
                ,
              
              
                59
              
              
                )
              
              
p1
              
                =
              
              Person
              
                .
              
              _make
              
                (
              
              person1
              
                )
              
              
                # _make()接受一個(gè)可迭代對(duì)象生成一個(gè)實(shí)例
              
              
                print
              
              
                (
              
              p1
              
                )
              
              
                # Person(name='zhangsan', age=25, score=59)
              
              
                print
              
              
                (
              
              p1
              
                .
              
              _asdict
              
                (
              
              
                )
              
              
                )
              
              
                # OrderedDict([('name', 'zhangsan'), ('age', 25), ('score', 59)])
              
              
                # _asdict()將實(shí)例的屬性和值以O(shè)rderedDict的方式展示出來(lái)。
              
            
          

首次發(fā)表于: 微信公眾號(hào):科技老丁哥,ID: TechDing,敬請(qǐng)關(guān)注。

本文所有代碼都已經(jīng)上傳到我的github,歡迎下載

參考資料:

  1. 《流暢的Python》,Luciano Ramalho (作者) 安道 , 吳珂 (譯者)。

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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

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

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

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

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美日韩在线视频观看 | 国产欧美日韩免费 | 国产一国产一有一级毛片 | 狠狠躁躁夜夜躁波多野结依 | 欧美三级一区 | 99在线免费观看 | 天天干天天天天 | 久久久久久久国产 | 成人精品鲁一区一区二区 | 美女网站黄在线观看 | av在线一区二区三区 | 国产一区二区精品久久91 | 九九av| 亚洲美女亚洲精品久久久久 | 国产精品免费观看 | 97精品一区二区 | 91在线免费视频 | 成年男女免费视频 | 国产在线观看91一区二区三区 | 九色九色久综色鬼在线 | 亚洲婷婷综合中文字幕第一页 | 国产精品高清视亚洲乱码 | 日韩在线观看中文 | 国产91久久精品 | 美女久久久久 | 亚洲高清在线视频 | 欧美日韩综合精品一区二区三区 | 国产精品久久99 | 久草免费福利资源站 | 国产毛A片啊久久久久久A | 国产精品99久久久久久久女警 | 欧美不卡| 999国产视频 | 亚洲欧美精品中字久久99 | 精品欧美 | 成人区精品一区二区婷婷 | 夜本色 | 人人做人人爽人人爱 | 欧美精品综合 | 免费黄网站在线播放 | 激情91 |