Python 標準庫中好用的工具
1. namedtuple
- 用途:可以建立具名稱的元組,類似簡單的資料類型,提供可讀性高的結構。
- 模組:
collections
- 特性:具備鍵值存取能力,並保持元組的不可變特性。
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(p.x, p.y) # 10 20
2. Counter
- 用途:統計元素的次數。
- 模組:
collections
- 特性:支援加法、減法等操作,常用於快速統計字符或數字出現的頻率。
from collections import Counter
text = "defaultdict and deque are useful"
counter = Counter(text.split())
print(counter) # Counter({'defaultdict': 1, 'and': 1, 'deque': 1, 'are': 1, 'useful': 1})
3. OrderedDict
- 用途:保留字典鍵值對的插入順序。
- 模組:
collections
- 特性:在需要順序敏感的場景中非常有用,例如序列化或輸出格式控制。
from collections import OrderedDict
od = OrderedDict()
od["a"] = 1
od["b"] = 2
od["c"] = 3
print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
4. defaultdict
- 用途:為未定義的鍵提供默認值,避免 KeyError。
- 模組:
collections
- 特性:適用於分組、計數等情境,已詳述於前文。
5. deque
- 用途:高效的雙端佇列操作。
- 模組:
collections
- 特性:支援 O(1) 的左右插入與刪除,適用於滑動窗口等操作。
from collections import deque
d = deque([1, 2, 3])
d.append(4) # 右側插入
d.appendleft(0) # 左側插入
print(d) # deque([0, 1, 2, 3, 4])
6. heapq
- 用途:處理最小堆(Min-Heap)和最大堆(Max-Heap)。
- 模組:
heapq
- 特性:用於快速取出最小值(或最大值),適合處理優先佇列和排序相關問題。
import heapq
nums = [5, 1, 8, 3]
heapq.heapify(nums) # 將列表轉為最小堆
print(nums) # [1, 3, 8, 5]
print(heapq.heappop(nums)) # 1
7. itertools
- 用途:提供高效的迭代器工具。
- 模組:
itertools
- 常用工具:
combinations
:計算組合。permutations
:計算排列。product
:計算笛卡兒積。
from itertools import combinations
data = [1, 2, 3]
print(list(combinations(data, 2))) # [(1, 2), (1, 3), (2, 3)]
8. functools.lru_cache
- 用途:記憶化函數結果,提升重複計算效率。
- 模組:
functools
- 特性:適用於需要快速重複調用的遞迴或計算函數。
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
print(fib(10)) # 55
9. bisect
- 用途:二分查找與插入操作。
- 模組:
bisect
- 特性:快速查找元素在已排序序列中的插入位置。
import bisect
nums = [1, 2, 4, 5]
bisect.insort(nums, 3) # 插入保持排序
print(nums) # [1, 2, 3, 4, 5]
10. queue.Queue
- 用途:多執行緒安全的佇列。
- 模組:
queue
- 特性:適用於需要佇列操作的多執行緒場景。
from queue import Queue
q = Queue()
q.put(1)
q.put(2)
print(q.get()) # 1
11. array
- 用途:處理數組類型的數據。
- 模組:
array
- 特性:比 Python 的列表更高效,適用於數值型數據。
from array import array
arr = array("i", [1, 2, 3]) # 初始化整數型陣列
arr.append(4)
print(arr) # array('i', [1, 2, 3, 4])
12. struct
- 用途:進行二進位數據處理與轉換。
- 模組:
struct
- 特性:適用於處理 C 類型結構數據。
import struct
packed_data = struct.pack("i", 42) # 將整數轉換為二進位
print(struct.unpack("i", packed_data)) # (42,)
13. statistics
- 用途:計算統計數據。
- 模組:
statistics
- 特性:提供均值、中位數、標準差等方法。
import statistics
data = [1, 2, 3, 4, 5]
print(statistics.mean(data)) # 3
print(statistics.median(data)) # 3
14. timeit
- 用途:測量程式執行時間。
- 模組:
timeit
- 特性:適合測試程式性能。
import timeit
print(timeit.timeit("sum(range(1000))", number=1000)) # 測試執行時間
15. re
- 用途:正規表示式處理。
- 模組:
re
- 特性:用於字串匹配、替換等操作。
import re
text = "The rain in Spain"
match = re.search("rain", text)
print(match.group()) # rain
以上工具在處理高效數據結構、演算法以及性能測試等方面非常實用,根據需求靈活選用能顯著提升程式效率與可讀性。
以下是另外 15 個 Python 標準庫中的實用工具,類似於 deque
和 defaultdict
,同樣能提升開發效率與便利性:
1. uuid
- 用途:生成唯一識別碼(UUID)。
- 模組:
uuid
- 特性:用於標識唯一對象或數據。
import uuid
unique_id = uuid.uuid4()
print(unique_id) # 類似於 123e4567-e89b-12d3-a456-426614174000
2. collections.ChainMap
- 用途:將多個字典合併為一個查詢對象。
- 模組:
collections
- 特性:不真正合併字典,但提供單一的查詢接口。
from collections import ChainMap
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
chain = ChainMap(dict1, dict2)
print(chain["b"]) # 2,優先取第一個字典的值
3. typing.NamedTuple
- 用途:類似
namedtuple
,但支援型別提示。 - 模組:
typing
- 特性:更現代化,適用於型別安全的程式。
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(10, 20)
print(p.x, p.y) # 10 20
4. pathlib
- 用途:操作路徑的模組。
- 模組:
pathlib
- 特性:提供面向對象的文件路徑操作。
from pathlib import Path
p = Path("/tmp/example.txt")
print(p.name) # example.txt
print(p.suffix) # .txt
5. json
- 用途:處理 JSON 格式數據。
- 模組:
json
- 特性:用於序列化和反序列化 JSON 資料。
import json
data = {"name": "Alice", "age": 25}
json_data = json.dumps(data)
print(json_data) # {"name": "Alice", "age": 25}
6. csv
- 用途:讀取和寫入 CSV 文件。
- 模組:
csv
- 特性:用於處理結構化數據。
import csv
with open("data.csv", mode="w", newline="") as file:
writer = csv.writer(file)
writer.writerow(["Name", "Age"])
writer.writerow(["Alice", 25])
7. random
- 用途:生成隨機數或進行隨機選擇。
- 模組:
random
- 特性:支援數值範圍內的隨機操作。
import random
print(random.randint(1, 100)) # 隨機整數
print(random.choice(["apple", "banana", "cherry"])) # 隨機選擇
8. secrets
- 用途:生成密碼或安全隨機數。
- 模組:
secrets
- 特性:比
random
更安全,用於密碼學場景。
import secrets
password = secrets.token_hex(16)
print(password) # 例如 a2b4c6d8e0f11234
9. textwrap
- 用途:格式化長文字段。
- 模組:
textwrap
- 特性:用於控制文字寬度或段落格式。
import textwrap
text = "Python is an amazing programming language that is easy to learn and powerful."
wrapped = textwrap.fill(text, width=40)
print(wrapped)
10. dataclasses
- 用途:定義簡單數據類型。
- 模組:
dataclasses
- 特性:自動生成初始化函數和其他方法。
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
p = Person("Alice", 25)
print(p)
11. time
- 用途:處理時間相關操作。
- 模組:
time
- 特性:計算當前時間或執行時間。
import time
start = time.time()
time.sleep(1)
end = time.time()
print(f"Elapsed time: {end - start} seconds")
12. enum
- 用途:定義列舉型別。
- 模組:
enum
- 特性:用於定義有意義的常數集合。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED) # Color.RED
print(Color.RED.value) # 1
13. copy
- 用途:支援深層複製和淺層複製。
- 模組:
copy
- 特性:用於處理複雜數據結構。
import copy
original = {"a": [1, 2, 3]}
shallow_copy = copy.copy(original)
deep_copy = copy.deepcopy(original)
14. hashlib
- 用途:生成哈希值。
- 模組:
hashlib
- 特性:用於校驗文件或密碼散列。
import hashlib
text = "hello"
hash_obj = hashlib.sha256(text.encode())
print(hash_obj.hexdigest()) # 生成 SHA-256 哈希值
15. base64
- 用途:進行 Base64 編碼和解碼。
- 模組:
base64
- 特性:用於數據傳輸或存儲。
import base64
data = "Python is great"
encoded = base64.b64encode(data.encode())
print(encoded) # b'UHl0aG9uIGlzIGdyZWF0'
decoded = base64.b64decode(encoded).decode()
print(decoded) # Python is great
這些工具涵蓋了檔案處理、數據結構、加密、時間管理等多種應用場景,適合解決日常開發中的不同問題。根據實際需求選用,能大幅提升開發效率!