Python開發中經常使用的標準庫

大多數基於 Python 開發的應用程序都會用到本地標準庫和三方庫,這樣不只能讓咱們把時間去關注真正的業務開發,也能學習到更多價值含量高的程序設計和開發思想。程序開發中有一句著名的話叫作:html

Don’t re-invent the wheel (不重複發明輪子)python

言簡意駭表達了不要作重複的事情。既然有人幫你完成了須要作的事情,那麼你就應該在合理適用的狀況下利用它,從而避免形成沒必要要的時間浪費。程序員

Python 庫能夠分爲兩大類,一類是標準庫,一類是三方庫。標準庫大都是下載對應 Python 版本時文件內置的,在程序中可直接調用且不須要用 pip 包管理工具從互聯網上下載。而三方庫則是其餘程序員爲了更好的實現某種目標,在實際開發中逐漸衍生出來的函數庫或副產品,而後將其放在互聯網上咱們共享。正則表達式

不管是標準庫仍是三方庫,對於咱們來講都有學習價值。下面列舉一些實際開發中可能會用到標準庫(三方庫下篇),以此來加深印象。算法

標準庫

sys

系統相關的參數和函數。sys 庫通常用來訪問和修改系統相關信息,好比查看 python 版本、系統環境變量、模塊信息和 python 解釋器相關信息等等。數據庫

os

操做系統接口模塊。這個庫提供了訪問操做系統相關依賴的方式,好比輸入輸出操做、讀寫操做、操做系統異常錯誤信息、進程線程管理、文件管理、調度程序等等。json

re

正則表達式操做。這個庫是我喜歡而且常常會用到的庫,在對大量字符串進行處理的時候用正則表達式是最快速有效的方式,可是正則表達式的學習曲線較高,有興趣的朋友能夠訪問這個網站學習。後端

math

數學函數庫。math 庫提供了對 C 語言標準定義的數學函數訪問,好比數論(Number-theoretic)的各類表示方法、冪和對數函數(Power and logarithmic functions)、三角函數(Trigonometric functions)、常量圓周率(π)和天然常數(e)等等。安全

random

生成僞隨機數。服務器

僞隨機數與隨機數(真隨機數)不一樣的是執行環境,隨機數是真實世界中經過物理過程實踐得出結論,而僞隨機數是經過計算機的特定算法生成的數,因此這個過程是可預測的、有規律的,只是循環週期較長,並不能與現實場景相切合。

random 庫提供生成隨機數,能夠模擬現實世界中隨機取數、隨機抽獎等等。

logging

日誌記錄工具。這個庫提供了對應用程序和庫函數的日誌記錄,平常開發中咱們常常須要經過日誌打印出當前程序的運行狀態,實時查看可能出現的堆棧異常和錯誤信息。

默認日誌打印級別(可自定義):

級別
危急 50
錯誤 40
異常 30
信息 20
調試 10
未設置 0

json

Json 編碼和解碼器。json 庫提供了對 json 數據的支持,平常開發中咱們作先後端分離須要對傳輸數據 json 進行序列化和反序列化操做,以保證對數據的完整性和有效性,而序列化和反序列化其實就是編碼和解碼的過程。

pickle

Python 對象序列化庫。pickle 庫支持對 python 對象進行序列化和反序列化操做,當咱們須要將處理好的對象保存到文件或數據庫中時,就能夠將其序列化成二進制數據,從而更好的保存起來。

shelve

Python 對象持久化。簡單的數據存儲方案。

socket

底層網絡接口。socket(套接字) 庫提供了標準的 BSD(伯克利套接字) Socket API,能夠經過訪問底層操做系統 Socket 的相關接口進行網絡通信。

datetime

基本日期和時間類型庫。該庫提供了各類簡單和複雜的方式處理日期和時間,平常咱們會用時間測算時間消耗、複雜度,對存儲的建立時間和修改時間也須要進一步說明,對計時器的描述和控制也須要用到該庫。

hashlib

安全哈希和消息摘要。摘要算法 其實就是對某些數據進行加密(不可逆的加密算法),由於被加密的數據沒法破解,因此就能防止被篡改。常見的摘要算法有 MD五、SHA1,通常咱們會用 MD5 對用戶口令進行加密,防止盜用後被輕易破解;而 SHA1 與 MD5 相似,可是 SHA1 會產生更長的長度,也更安全,可是算法的複雜性一般伴隨着存儲空間和時間的消耗。要說比SHA1更長的字符長度,還有 SHA22四、SHA25六、SHA384 和 SHA512,看名字就能知道。

你們都知道不管算法生成的字符長度如何都有可能發生碰撞(被破解),這是不可避免的,因此具體場景具體狀況而定。

configparser

配置文件解析器。configparser 庫能夠輕鬆定製配置文件,經過解析配置文件的信息咱們就能夠全局訪問相關配置。

urllib

URL 處理模塊。urllib 庫集成了處理 URLs(統一資源定位符)的各類模塊:

  • urllib.request 訪問和讀取URL數據
  • urllib.error 包含urllib.request拋出的異常
  • urllib.parse 解析URL數據
  • urllib.robotparser 解析robots.txt文件

urllib 庫對訪問網絡有很好的支持,提供了對數據的訪問和處理、文件的上傳和下載、記錄 cookie 和 session 等等。

itertools

爲高效循環而建立迭代器的函數。itertools 庫也是常常須要用到,當咱們要對某些數進行 for-in 時就須要先將其處理成一個可迭代對象,以後咱們才能進行遍歷操做。

collections

容器數據類型庫。collections 庫提供了對全部容器數據類型的支持,包括 dict, list, set 和 tuple。咱們能夠用此庫對不一樣數據類型進行操做,常有的函數方法有這些:

  • namedtuple() 建立命名元組子類的工廠函數
  • deque 相似列表(list)的容器,實現了在兩端快速添加(append)和彈出(pop)
  • ChainMap 相似字典(dict)的容器類,將多個映射集合到一個視圖裏面
  • Counter 字典的子類,提供了可哈希對象的計數功能
  • OrderedDict 字典的子類,保存了他們被添加的順序
  • defaultdict 字典的子類,提供了一個工廠函數,爲字典查詢提供一個默認值
  • UserDict 封裝了字典對象,簡化了字典子類化
  • UserList 封裝了列表對象,簡化了列表子類化
  • UserString 封裝了列表對象,簡化了字符串子類化

functools

高階函數和可調用對象上的操做。該庫主要調用高階函數,是常規函數的一種補充。目前庫中包含如下幾種函數:

  • cmp_to_key
  • lru_cache
  • total_ordering
  • partial
  • partialmethod
  • reduce
  • singledispatch
  • update_wrapper
  • wraps

threading

線程並行庫。threading 庫支持線程和多線程的操做,針對多線程併發的問題能夠給數據加同步鎖,一次只能讓一個線程處理數據,從而避免出現數據讀寫混亂。

在 CPython 解釋器上,由於 GIL(全局解釋器鎖)鎖機制的存在的,被設計成線程安全,因此同一時間只能執行一個線程,這就致使了多線程不能發揮出計算機的多核特性。

multiprocessing

進程並行庫。multiprocessing 庫與 threading 庫很相似,不一樣的是進程庫能夠建立子進程避開 GIL,從而彌補線程庫存在的劣勢和發揮計算機的多核特性。

timeit

測量小代碼片斷的執行時間。此庫主要用來計算運行代碼的時間消耗,支持多種方式傳入參數。

atexit

退出處理器。當處理一個函數須要立馬退出時可使用該庫。

abc

抽象基類。abc 庫定義抽象基類,以便其餘類派生出新類。好比 collections 容器庫中就有此派生出的 collections.abc 類,派生出來的類能夠進一步實現。

asyncio

異步IO庫。asyncio 庫是一個用 async/await 關鍵字編寫併發的庫,爲多個異步框架提供基礎功能,可以實現高性能的網絡、Web服務器、數據庫鏈接和分佈式任務隊列等。

異步開發中asyncio庫提供兩類API,高階API:

和低階API:

base64

數據編碼庫。base64 庫用於對原始二進制數據進行編碼,從而方便數據能在互聯網上傳播。

例如,當咱們須要用 json 數據來傳播一張圖片時,就須要先對圖片的二進制數據進行編碼(json 不能攜帶二進制數據)後保存到 value 當中,當另外一方拿到 json 數據後就能夠用同類的算法進行解碼,從而獲得二進制圖片數據。

base64 庫中提供多種編碼算法,最著名的莫過於以他命名的 base64。base64 的編碼方式是將二進制數據 000000111111 的 64 種狀態編碼成 0-9 的數字、a-z、A-Z 字母以及 + 號和 / 號,以 6 位一組的方式進行編碼。當二進制數據不足 6 位時會經過補位和標記的方式處理,具體看這裏

除 base64 外,base64 庫還提供其餘的編碼算法,例如 base1六、base3二、ascii85 和 base85。須要注意的是,base64 嚴格意義上不能算是一種加密,而是編碼轉換,用於轉換爲可見字符串。

concurrent.futures

啓動並行任務。concurrent.futures 庫提供高層次的接口來實現異步調用,有兩種方式,一種是爲線程實現的 ThreadPoolExecutor,一種是爲進程實現的 ProcessPoolExecutor,從名字能夠看出,兩則都是從 Executor 抽象類中實現而來。

copy

淺層和深層複製操做。copy 庫提供對對象的拷貝,咱們都知道要製做對象副本,是沒法經過簡單值傳遞建立新變量的方式作到,由於新變量所指向的內存空間依舊是原對象自己,因此對新變量進行任何操做都會改變原對象。那麼,copy 庫就提供了製做對象副本的各類方法,會開闢一個新的內存空間存放副本對象,修改操做不會對原對象有任何干預。

csv

csv(Comma Separated Values)文件讀寫庫。此庫支持以純文本的形式存儲表格數據(數字和文本)。

operator

標準運算符替代函數庫。此庫是將 python 自有的運算符做爲有效函數,好比表達式 x+y 能夠用函數 operator.add(x, y) 表示;好比表達式 a*b 能夠用函數 operator.mul(a, b) 表示,等等。

enum

枚舉庫。enum 庫支持建立枚舉類來存儲大量同類型的不可變常量,以便其餘函數調用。建立出來的枚舉類是可迭代對象,因此能夠用 for-in 枚舉出全部常量。

heapq

堆隊列算法。這個模塊提供了堆隊列算法的實現,也稱爲 優先隊列算法。優先隊列中的每一個元素都有各自的優先級,優先級最高的元素最早獲得服務。因此當咱們要求前n最大/最小值的時候就能夠用此算法來實現,heapq 庫中也提供了相應函數實現。

http

HTTP 模塊。http 模塊是一個包,收集了多個處理超文本傳輸協議的模塊:

  • http.client 低層級的 HTTP 協議客戶端,高層級的 URL 訪問使用 urllib.request
  • http.server 基於 socketserver 的基本 HTTP 服務類
  • http.cookies cookies 狀態管理工具
  • http.cookiejar 提供了 cookies 的持久化

http 模塊經過 http.HTTPStatus 枚舉定義了 HTTP狀態碼 以及相關聯消息。

profile、pstats

性能分析工具。profile 模塊提供了 profilecProfile 兩種不一樣實現的性能分析工具,可用來描述程序各個部分的執行時間和頻率,統計後的信息能夠經過 pstats 模塊保存並使用。

ssl

TLS/SSL(傳輸安全協議)。此模塊提供對安全協議的支持,經過應用上下文,可將 TLS(傳輸層安全性協議)或其前身 SSL(安全套接層)支持安全協議,能爲互聯網通訊提供安全和數據完整性保障。通常 HTTPS 協議都支持 TLS/SSL 加密。

unitest

單元測試框架。unitest 庫經常使用於單元測試,受到 JUnit 和其餘主流測試庫的啓發,unitest 庫的功能和函數與它們有着類似的風格。

uuid

UUID庫。uuid 庫主要用途是生成隨機字符串,庫中有多個版本的 UUID 對象方法,好比版本 一、三、4 和 5 的 uuid1()uuid3()uuid4()uuid5()。須要注意的是,若是要生成隨機字符串,可使用 uuid1()uuid4(),可是 uuid1() 會存在隱私風險,由於生成的原理裏邊包含用戶訪問計算機的網絡地址,而 uuid4() 是經過隨機字符生成。

uuid1() 的生成方式也未必是安全的,當兩個進程同時處理時由於沒有同步鎖的存在,因此沒辦法保證不會生成兩個相同的 UUID。

總結

標準庫是語言包中默認存在的,雖然大多數基礎功能已經實現,也就意味着咱們不須要重複造輪子,可是咱們仍是須要花些時間去關注和了解其中程序設計的思惟,學習開源大牛們是如何將地基打堅固,爲咱們即將開發的上層應用創建基礎。

注:

  • 文章持續更新,歡迎提供更多有價值的標準庫。
  • Python3 的 中文wiki英文wiki
相關文章
相關標籤/搜索