<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python最冷門的模塊

          共 1641字,需瀏覽 4分鐘

           ·

          2020-06-14 23:23

          e3bd0aaa1c3139a5ccf53871464b3868.webp
          題圖:Photo by Paulo Jacobe on Unsplash


          大家好,我是軍哥

          今天開始,開一個(gè)冷門模塊的系列更新。

          collections模塊算得上是最冷門的模塊之一,用得人少,但是功能很強(qiáng)大。

          collections提供了4個(gè)重要的數(shù)據(jù)類型,在實(shí)際開發(fā)中或多或少會(huì)接觸到,通過(guò)使用這些數(shù)據(jù)類型,可以讓你的代碼變得更優(yōu)雅、更地道。

          c4ca1a754e1dde5f6c760f408ce20bbd.webp

          今天先來(lái)介紹 namedtuple 這個(gè)類型

          namedtuple

          namedtuple 是 元組(tuple)類型的子類,所以本質(zhì)上它還是一個(gè)元組類型,繼承了元組所有的的特性,namedtuple 特別之處在于你可以通過(guò)名字來(lái)訪問元組中的元素,類似字典,通過(guò)key來(lái)訪問value。

          以前訪問元組中的元素必須通過(guò)索引訪問

          >>> x, y = 1,2
          >>> point = (x, y)
          >>> point[0]
          1
          >>> point[1]
          2

          現(xiàn)在你可以通過(guò)屬性名來(lái)訪問,先看如何定義一個(gè) namedtuple

          定義

          from collections import namedtuple
          # 首先定義一個(gè)namedtuple類
          # 類的名字 "Point"
          # 它有兩個(gè)屬性 x 和 y
          >>> Point = namedtuple('Point', ['x', 'y'])

          # namedtuple初始化
          >>> p = Point(x=11, y=22)

          # 和tuple類型一樣,通過(guò)下標(biāo)索引訪問,等價(jià)于 p = (11, 22)
          >>> p[0] + p[1]
          33

          # 通過(guò)字段屬性來(lái)訪問,這是namedtuple獨(dú)有的特性
          >>> p.x + p.y
          33

          咋看起來(lái),要使用 namedtuple還是挺麻煩的,不像tuple一樣,直接 p = (11, 22) 就定義了一個(gè)元組對(duì)象,那什么場(chǎng)景下會(huì)用到 namedtuple呢?

          答案是在使用tuple可讀性不強(qiáng),但是又不希望用class來(lái)自定義類的時(shí)候。

          比如有這樣一組數(shù)據(jù)

          bob = ('Bob', 30, 'male')

          看值其實(shí)你是不知道這里面的3個(gè)元素分別表示什么意思的,也許你能猜出來(lái),但也僅僅是靠猜,那怎么樣可讀性更好一點(diǎn)呢?其實(shí),我們可以自定義一個(gè)類來(lái)抽象化這組數(shù)據(jù)

          class Person:

          def __init__(name, age, gender):
          self.name = name
          self.age = age
          self.gender = gender

          bob = Person('Bob', 30, 'male')

          通過(guò)Person類,你可以一目了然,知道Bob對(duì)應(yīng)的就是name,30對(duì)應(yīng)的是 age,male 對(duì)應(yīng)的gender字段。

          可是這樣做,雖然可讀性更強(qiáng)一點(diǎn)了,但是代碼更麻煩,更重要的是創(chuàng)建一個(gè)這樣的對(duì)象消耗的成本會(huì)比純粹的元組高很多。

          而 namedtuple 正好可以解決這種問題,它即繼承了tuple良好的性能,又有可讀性的特點(diǎn)。

          from collections import namedtuple

          Person = namedtuple("Person", "name age gender")
          bob = Person(name='Bob', age=30, gender='male')

          >>> bob[0]
          'Bob'
          >>> bob.name
          'Bob'
          >>> bob.age
          30
          >>> bob[1]
          30

          你有沒有注意到,namedtuple可認(rèn)為是一種簡(jiǎn)單的自定義類,可以指定屬性,但是不能像class定義的類一樣定義方法。因此,在考慮到如果定義一個(gè)類,類里面不需要定義方法時(shí),其實(shí)就可以用namedtuple來(lái)代替。

          這就是namedtuple的作用,你了解了嗎?


          推薦:


          1. 臥槽!python這個(gè)內(nèi)置模塊可以開發(fā)游戲

          2. 哈工程和哈工大被 MathWorks 禁止使用 MATLAB


          瀏覽 61
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  韩国操逼片| 国产乱子伦精品视频潮 | 天天撸天天操天天日 | 欧美黄色免费看 | 国产成人精品视频在线 |