推薦5個超級實用的 Python 模組,不知道就out啦!
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
- 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 程式設計學習圈,每日干貨分享
- 介紹一款能取代 Scrapy 的爬蟲框架 - feapder
- 直觀講解一下 RPC 呼叫和 HTTP 呼叫的區別!
- MySQL 億級資料分頁的優化
- Python 多執行緒小技巧:比 time.sleep 更好用的暫停寫法!
- Python面試官:請說說併發場景鎖怎麼用?
- Python如何非同步傳送日誌到遠端伺服器?
- Python 中的數字到底是什麼?
- 如何建立一個完美的 Python 專案?
- 詳解 Python 的二元算術運算,為什麼說減法只是語法糖?
- Python 為什麼沒有 main 函式?為什麼我不推薦寫 main 函式?
- Bug分析,假刪除導致文章釋出成功卻打不開的問題
- Python 進階:queue 佇列原始碼分析
- Python例項篇:自動操作Excel檔案(既簡單又特別實用)
- 誰說程式設計師不懂浪漫,當代碼遇到文學..
- Python 為什麼沒有 void 關鍵字?
- 程式語言中分號“;”的簡明歷史
- Python 什麼情況下會生成 pyc 檔案?
- 函式和方法的裝飾器
- Python 任務自動化工具:nox 的配置與 API
- 你可能不知道的 Python 技巧