Python 标準庫有超過 200 個子產品,程式員可以在他們的程式中導入和使用。雖然普通程式員對其中許多子產品都有經驗,但很可能有一些子產品他們仍然沒有注意到。
我發現其中許多子產品包含在各個領域都非常有用的功能。比較資料集、使用其他函數以及使用音頻隻是 Python 可以自動幫助你做的一些事情。
是以,我編制了一份你可能不知道的 Python 子產品的候選清單,并對它們進行了适度詳細的解釋,以便你将來能夠了解和使用它們。
所有這些子產品都有不同的功能和類。我包含了幾個鮮為人知的函數和類,是以即使你聽說過這些子產品,也可能不知道它們的某些方面和用途
difflib子產品
difflib是一個 Python 子產品,專注于比較資料集,尤其是字元串。為了具體了解你可以使用此子產品完成的幾件事,讓我們檢查一下它的一些最常見的功能。
- SequenceMatcher是一個比較兩個字元串并根據它們的相似性傳回資料的函數。通過使用ratio(),我們将能夠根據比率/百分比來量化這種相似性。
# SequenceMatcher(None, string1, string2)
from difflib import SequenceMatcher
phrase1 = "Hello World."
phrase2 = "Hello World."
similarity = SequenceMatcher(None, phrase1, phrase2)
print(similarity.ratio())
# Output: 1.0
2 .接下來是get_close_matches函數,它傳回與作為參數傳入的字元串最接近的比對項
# get_close_matches(word, possibilities, result_limit, min_similarity)
from difflib import get_close_matches
word = 'Tandrew'
possibilities = ['Andrew', 'Teresa', 'JackeyLove', 'Janderson', 'Drew']
print(get_close_matches(word, possibilities))
# Output: ['Andrew']
word是函數将要檢視的目标詞。possibilities是一個包含函數将查找并找到最接近比對項的比對項的數組。result_limit是傳回結果數量的限制(可選)。min_similarity是兩個單詞需要具有的最小相似度才能被函數視為傳回值(可選)
以下是Difflib你可以檢視的其他一些方法和類:
- unified_diff
- Differ
- diff_bytes
sched子產品
sched是一個有用的子產品,以跨平台工作的事件排程為中心,與 Windows 上的任務排程程式等工具形成鮮明對比。大多數情況下,在使用這個子產品時,schedular都會使用該類。
建立schedular執行個體:
schedular_name = sched.schedular (time.time, time.sleep)
可以從schedular執行個體調用各種方法。
- 當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()
binaascii子產品
binaascii是一個用于在二進制和 ASCII 之間轉換的子產品。
b2a_base64是binaascii子產品中的方法之一,它将base64資料轉換為二進制。下面是這個方法的一個例子:
import base64
import binascii
msg = "Jack"
encoded = msg.encode('ascii')
base64_msg = base64.b64encode(encoded)
decode = binascii.a2b_base64(base64_msg)
print(decode)
# Output: b'Jack'
簡單來說就是編碼轉base64,再轉回binary的b2a_base64方法。
以下是屬于該binaascii子產品的一些其他功能:
- a2b_qp()
- b2a_qp()
- a2b_uu()
tty子產品
tty是一個包含多個實用功能的子產品,可用于處理 tty 裝置。以下是它的兩個功能:
- setraw()将其參數 ( fd ) 中檔案描述符的模式更改為 raw。
- setcbreak()将其參數 ( fd ) 中檔案描述符的模式更改為 cbreak。
由于需要使用該termios子產品,該子產品僅适用于 Unix,例如在上述兩個函數 ( when=termios.TCSAFLUSH) 中指定第二個參數。
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 函數和子產品非常重要,以便保持穩定的工具庫,你可以在編寫代碼時快速使用這些工具。
無論你的程式設計專業知識水準如何,你都應該不斷學習。多投入一點時間可以為你帶來更多價值,并為你節省更多未來時間。
如果你發現我的任何文章有幫助或有用,麻煩點贊或者轉發。 謝謝!