Python最冷門的模塊

2021-03-02 Python之禪


題圖:Photo by Paulo Jacobe on Unsplash


大家好,我是軍哥

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

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這個內置模塊可以開發遊戲

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

相關焦點

  • Python之os模塊
    引言眾所周知,python是一種強大的腳本語言,那麼,問題來了,為什麼不用python來編寫Linux腳本呢?問題的答案就是python有os 模塊啊!這個os模塊能夠讓你像在Linux命令行中操作文件一樣,在python中也實現同樣的功能,感覺它就是python天生用來替換BASH的,而且它能夠呈現出一種更簡潔友好的腳本體驗!
  • python的模塊和序列
    前言概要本章節主要講述python中的模塊和序列的概念以及如何使用模塊和序列化方面的知識。模塊的概念在python中有個關鍵詞是import,代表的是導入、加載的意思。通常import加載的模塊分為四個通用類別:使用python語言編寫的代碼(後綴名為py的文件)已被編譯為共享庫或DLL的C或C++的擴展使用C編寫並連接到python解釋器的內置模塊
  • python數據分析專題 (7):python數據分析模塊
    python是一門優秀的程式語言,而是python成為數據分析軟體的是因為python強大的擴展模塊。
  • python中的Requests模塊
    講解對象:python中的Requests模塊作者:融水公子 rsgz介紹:1 Requests 是一個第三方 Python 模塊2 Requests 唯一的一個非轉基因的apt-get update  #更新軟體列表2 安裝pip3執行命令:sudo apt-get install python3
  • Python的武器庫02:math模塊
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以又這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • Python的武器庫07:sympy模塊
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。Python正式由於這些模塊的出現,只要引入這個模塊,調用這個模塊的集成函數,問題迎刃而解;不需要從頭開始,節省了大量的時間。
  • python命令參數及模塊的導入學習
    python已經成為程式語言排行榜的老大了,要向不被時代淘汰,就要緊跟時代步伐,在IT編程世界的今天,不會python可是不行的,今天繼續學習python的命令及相關模塊導入學習。import 與 from...import
  • Python的武器庫04:numpy模塊(上)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以又這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • python中的模塊詳解
    概念python中的模塊是什麼?簡而言之,在python中,一個文件(以「.py」為後綴名的文件)就叫做一個模塊,每一個模塊在python裡都被看做是一個獨立的文件。模塊可以被項目中的其他模塊、一些腳本甚至是交互式的解析器所使用,它可以被其他程序引用,從而使用該模塊裡的函數等功能,使用Python中的標準庫也是採用這種方法。分類在Python中模塊分為以下幾種:系統內置模塊,例如:sys、time、json模塊等等;自定義模塊,自定義模塊是自己寫的模塊,對某段邏輯或某些函數進行封裝後供其他函數調用。
  • Python學習筆記:模塊和包
    模塊就是python程序,任何python程序都可作為模塊導入。對於任何程序,只要導入了模塊,即可使用該模塊內的所有成員。道理很簡單:python怎麼知道到哪裡去找這個模塊呢?為了讓python能找到我們編寫(或第三方提供)的模塊,可以使用兩種方式來告訴它:使用環境變量Python將會根據PYTHONPATH環境變量的值來確定到哪裡去加載模塊。
  • python模塊三劍客之time os sys
    概要在python有幾個常用的模塊,今天來介紹一下python模塊中的三劍客:time模塊、os模塊、sys模塊。一、time模塊在python中,所有跟時間有關的操作都要用到時間模塊。我們在使用這個模塊之前,首先需要導入這個模塊。
  • 三分鐘從入門到精通——Python模塊
    中的模塊:假設您正在使用python解釋器。因此,python有一種方法可以將該函數定義放入文件中並隨時使用。模塊是ModuleType類型的對象。該模塊基本上是一個python文件(擴展名為的文件.py),其中包含定義和語句(例如:類,函數,變量等)。Python中的模塊為我們提供了邏輯上組織代碼的靈活性。我們使用模塊將大型程序分解為小的可管理文件。
  • python String模塊在實際應用的代碼介紹
    python String模塊在實際應用的代碼介紹 本文以python String模塊的相關代碼的方式來介紹python String模塊的具體應用方法的介紹,那麼下面的文章就讓我們一起分享吧!
  • Python的武器庫05:numpy模塊(下)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • Python入門教程 | 第 5 章 模塊
    而如果在其他地方導入該hello模塊時,if判斷將失敗,因此,這種if測試可以讓一個模塊通過命令行運行時執行一些額外的代碼,最常見的就是運行測試。我們可以用命令行運行hello.py看看效果:$ python3 hello.pyHello, world!$ python hello.py WuGenQiangHello, WuGenQiang!
  • Python wsgiref 模塊源碼淺析
    Python的wisgiref模塊提供了demo_app,來演示如何使用wsgi協議。python定義了wsgi,讓web框架幾乎可以大一統了。下面就來分析,python是如何實現這個協議的。WSGIServerpython使用WSGIServer和WSGIRequestHandler構建wsgi協議的服務。
  • Python 中的 Subprocess 模塊
    翻譯丨寫樂原文丨pythonforbeginners以前我一直用os.system()處理一些系統管理任務
  • Python3 pickle模塊的使用詳解
    pickle模塊特點1、只能在python中使用,只支持python的基本數據類型。2、可以處理複雜的序列化語法。
  • Python 爬蟲基礎入門篇——Requests模塊
    ,但是沒有詳細的講解,本次推文專門帶大家了解一下Requests模塊。模塊簡介Requests是使用Apache2 licensed 許可證的HTTP庫;是一個基於Python開的Http庫,其在Python內置模塊的基礎上進行了高度的封裝,從而我們在使用Http請求的時候變得非常的簡單;比urllib2模塊更簡潔好用;安裝安裝很簡單請求類型HTTP的請求類型分別為:GET(獲取數據)、POST(提交表單
  • python教程之七模塊與函數庫
    模塊上一章,我們講解了函數的概念及其使用方法和案例等,我們定義了函數後,可以多次調用該函數來使用,但是如果我們從python解釋器退出後,這些函數信息就都無效了,為此,我們本章提供了模塊這個概念。我們把這些定義存放在文件裡,保存在磁碟裡,這個文件被稱為模塊。模塊是包含所有我們定義的函數和變量的文件,可以被別的程序引入,用來使用模塊裡面的信息。