Python最冷門的模組

2021-10-07 14:45:48 字數 2148 閱讀 8739

今天開始,開乙個冷門模組的系列更新。

collections模組算得上是最冷門的模組之一,用得人少,但是功能很強大。

collections提供了4個重要的資料型別,在實際開發中或多或少會接觸到,通過使用這些資料型別,可以讓你的**變得更優雅、更地道。

今天先來介紹 namedtuple 這個型別

namedtuple

namedtuple 是 元組(tuple)型別的子類,所以本質上它還是乙個元組型別,繼承了元組所有的的特性,namedtuple 特別之處在於你可以通過名字來訪問元組中的元素,類似字典,通過key來訪問value。

以前訪問元組中的元素必須通過索引訪問

x, y = 1,2

point = (x, y)

point[0]

1

point[1]

2現在你可以通過屬性名來訪問,先看如何定義乙個 namedtuple

定義

from collections import namedtuple

#首先定義乙個namedtuple類

#類的名字是 「point」

#它有兩個屬性 x 和 y

point = namedtuple(『point』, [『x』, 『y』])

#namedtuple初始化

p = point(x=11, y=22)

#和tuple型別一樣,通過下標索引訪問,等價於 p = (11, 22)

p[0] + p[1]

33

#通過字段屬性來訪問,這是namedtuple獨有的特性

p.x + p.y

33咋看起來,要使用 namedtuple還是挺麻煩的,不像tuple一樣,直接 p = (11, 22) 就定義了乙個元組物件,那什麼場景下會用到 namedtuple呢?

答案是在使用tuple可讀性不強,但是又不希望用class來自定義類的時候。

比如有這樣一組資料

bob = (『bob』, 30, 『male』)

看值其實你是不知道這裡面的3個元素分別表示什麼意思的,也許你能猜出來,但也僅僅是靠猜,那怎麼樣可讀性更好一點呢?其實,我們可以自定義乙個類來抽象化這組資料

class person:

def __init__(name, age, gender):

self.name = name

self.age = age

self.gender = gender

bob = person(『bob』, 30, 『male』)

通過person類,你可以一目了然,知道bob對應的就是name,30對應的是 age,male 對應的gender欄位。

可是這樣做,雖然可讀性更強一點了,但是**更麻煩,更重要的是建立乙個這樣的物件消耗的成本會比純粹的元組高很多。

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

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可認為是一種簡單的自定義類,可以指定屬性,但是不能像class定義的類一樣定義方法。因此,在考慮到如果定義乙個類,類裡面不需要定義方法時,其實就可以用namedtuple來代替。

這就是namedtuple的作用

Python冷門知識之dictproxy

眾所周知,python大部分物件的屬性都是由 dict 特殊屬性完成的,而且這個 dict 不僅物件可改變,而且這個屬性本身就可改變。class c object pass obj c obj.sth 10print obj.dict obj.dict sth 100print obj.sth 10...

分享幾個冷門Python技巧

有很多文章介紹了python中各種很酷的功能 如變數拆包 偏函式 列舉可迭代物件等 但說到python時,還有很多東西可以談論。今天打算分享我所知道和使用的一些特性,這些我在其他地方很少見人提到過。整理字串輸入 對使用者輸入進行整理的問題幾乎適用於你編寫的所有程式。通常情況下,將字元轉換為小寫或大寫...

python載入模組 Python 模組的載入順序

基本概念 module 模組,乙個 py 檔案或以其他檔案形式存在的可被匯入的就是乙個模組 package 包,包含有 init 檔案的資料夾 relative path 相對路徑,相對於某個目錄的路徑 absolute path 絕對路徑,全路徑 python 直譯器是如何查詢包和模組的 pyth...