推薦5個超級實用的 Python 模組,不知道就out啦!

語言: CN / TW / HK

Python 標準庫有超過 200 個模組,程式設計師可以在他們的程式中匯入和使用。雖然普通程式設計師對其中許多模組都有一些經驗,但很可能有一些好用的模組他們仍然沒有注意到。

我發現其中許多模組都包含了在各個領域都非常有用的函式。比較資料集、協作其他函式以及音訊處理等都可以僅使用 Python 就可以自動完成。

因此,我編制了一份您可能不知道的 Python 模組的候選清單,並對這幾個模組進行了適當的解釋,以便您在將來理解和使用它們。

所有這些模組都有不同的函式和類。本文包含了幾個鮮為人知的函式和類,因此即使您聽說過這些模組,也可能不知道它們的某些方面和用途。

1. difflib
difflib 是一個專注於比較資料集(尤其是字串)的 Python 模組。為了具體瞭解您可以使用此模組完成的幾件事,讓我們檢查一下它的一些最常見的函式。

SequenceMatcher

SequenceMatcher 是一個比較兩個字串並根據它們的相似性返回資料的函式。通過使用 ratio(),我們將能夠根據比率/百分比來量化這種相似性。

語法:

SequenceMatcher(None, string1, string2)

下面這個個簡單的例子展示了該函式的作用:

from difflib import SequenceMatcher

phrase1 = "Tandrew loves Trees."
phrase2 = "Tandrew loves to mount Trees."
similarity = SequenceMatcher(None, phrase1, phrase2)
print(similarity.ratio())
# Output: 0.8163265306122449
get_close_matches

接下來是 get_close_matches,該函式返回與作為引數傳入的字串最接近的匹配項。

語法:

get_close_matches(word, possibilities, result_limit, min_similarity)

下面解釋一下這些可能有些混亂的引數:

  • word 是函式將要檢視的目標單詞。
  • possibilities 是一個數組,其中包含函式將要查詢的匹配項並找到最接近的匹配項。
  • result_limit 是返回結果數量的限制(可選)。
  • min_similarity 是兩個單詞需要具有的最小相似度才能被函式視為返回值(可選)。

下面是它的一個使用示例:

from difflib import get_close_matches

word = 'Tandrew'
possibilities = ['Andrew', 'Teresa', 'Kairu', 'Janderson', 'Drew']

print(get_close_matches(word, possibilities))
# Output: ['Andrew']

除此之外還有幾個是您可以檢視的屬於 Difflib 的其他一些方法和類:unified_diff、Differ和 diff_bytes

  1. sched
    sched 是一個有用的模組,它以跨平臺工作的事件排程為中心,與 Windows 上的任務排程程式等工具形成鮮明對比。大多數情況下,使用此模組時,都會使用 schedular 類。

更常見的 time 模組通常與 sched 一起使用,因為它們都處理時間和排程的概念。

建立一個 schedular 例項:

schedular_name = sched.schedular(time.time, time.sleep)

可以從這個例項中呼叫各種方法。

  • 呼叫 run() 時,排程程式中的事件/條目會按照順序被呼叫。在安排完事件後,此函式通常出現在程式的最後。
  • enterabs() 是一個函式,它本質上將事件新增到排程程式的內部佇列中。它按以下順序接收幾個引數:
    事件執行的時間
    活動優先順序
    事件本身(一個函式)
    事件函式的引數
    事件的關鍵字引數字典

下面是一個示例,說明如何一起使用這兩個函式:

import sched
import time


def event_notification(event_name):
    print(event_name + " has started")


my_schedular = sched.scheduler(time.time, time.sleep)
closing_ceremony = my_schedular.enterabs(time.time(), 1, event_notification, ("The Closing Ceremony", ))

my_schedular.run()
# Output: The Closing Ceremony has started

還有幾個擴充套件 sched 模組用途的函式:cancel()、enter() 和 empty()。

3. binaascii
binaascii 是一個用於在二進位制和 ASCII 之間轉換的模組。

b2a_base64 是 binaascii 模組中的一種方法,它將 base64 資料轉換為二進位制資料。下面是這個方法的一個例子:

import base64
import binascii

msg = "Tandrew"
encoded = msg.encode('ascii')
base64_msg = base64.b64encode(encoded)
decode = binascii.a2b_base64(base64_msg)
print(decode)
# Output: b'Tandrew'

該段程式碼應該是不言自明的。簡單地說,它涉及編碼、轉換為 base64,以及使用 b2a_base64 方法將其轉換回二進位制。

以下是屬於 binaascii 模組的其他一些函式:a2b_qp()、b2a_qp() 和 a2b_uu()。

4. tty
tty 是一個包含多個實用函式的模組,可用於處理 tty 裝置。以下是它的兩個函式:

  • setraw() 將其引數 (fd) 中檔案描述符的模式更改為 raw。
  • setcbreak() 將其引數 (fd) 中的檔案描述符的模式更改為 cbreak。

由於需要使用 termios 模組,該模組僅適用於 Unix,例如在上述兩個函式中指定第二個引數(when=termios.TCSAFLUSH)。

5. weakref
weakref 是一個用於在 Python 中建立對物件的弱引用的模組。

弱引用是不保護給定物件不被垃圾回收機制收集的引用。

以下是與該模組相關的兩個函式:

  • getweakrefcount() 接受一個物件作為引數,並返回引用該物件的弱引用的數量。
  • getweakrefs() 接受一個物件並返回一個數組,其中包含引用該物件的所有弱引用。

weakref 及其函式的使用示例:

import weakref


class Book:
    def print_type(self):
        print("Book")


lotr = Book
num = 1
rcount_lotr = str(weakref.getweakrefcount(lotr))
rcount_num = str(weakref.getweakrefcount(num))
rlist_lotr = str(weakref.getweakrefs(lotr))
rlist_num = str(weakref.getweakrefs(num))

print("number of weakrefs of 'lotr': " + rcount_lotr)
print("number of weakrefs of 'num': " + rcount_num)

print("Weakrefs of 'lotr': " + rlist_lotr)
print("Weakrefs of 'num': " + rlist_num)
# Output: 
# number of weakrefs of 'lotr': 1
# number of weakrefs of 'num': 0
# Weakrefs of 'lotr': [<weakref at 0x10b978a90; to 'type' at #0x7fb7755069f0 (Book)>]
# Weakrefs of 'num': []

輸出從輸出的函式返回值我們可以看到它的作用。由於 num 沒有弱引用,因此 getweakrefs() 返回的陣列為空。擴充套件:接私活兒

以下是與 weakref 模組相關的一些其他函式:ref()、proxy() 和 _remove_dead_weakref()。

回顧

  • Difflib 是一個用於比較資料集,尤其是字串的模組。例如,SequenceMatcher 可以比較兩個字串並根據它們的相似性返回資料。
  • sched 是與 time 模組一起使用的有用工具,用於使用 schedular 例項安排事件(以函式的形式)。例如,enterabs() 將一個事件新增到排程程式的內部佇列中,該佇列將在呼叫 run() 函式時執行。

binaascii 可在二進位制和 ASCII 之間轉換以編碼和解碼資料。b2a_base64 是 binaascii 模組中的一種方法,它將 base64 資料轉換為二進位制資料。

tty 模組需要配合使用 termios 模組,並處理 tty 裝置。它僅適用於 Unix。

weakref 用於弱引用。它的函式可以返回物件的弱引用,查詢物件的弱引用數量等。其中非常使用的函式之一是 getweakrefs(),它接受一個物件並返回一個該物件包含的所有弱引用的陣列。

要點
這些函式中的每一個都有其各自的用途,每一個都有不同程度的有用性。瞭解儘可能多的 Python 函式和模組非常重要,以便保持穩定的工具庫,您可以在編寫程式碼時快速使用。

無論您的程式設計專業知識水平如何,您都應該不斷學習。多投入一點時間可以為您帶來更多價值,併為您節省更多未來時間。

以上就是本次分享的所有內容,想要了解更多歡迎前往公眾號:Python 程式設計學習圈,每日干貨分享