functools 是 Python 標準庫中一個極為實用的模塊,提供了許多用于處理函數、高階函數以及函數式編程的工具。
用途: 創建一個新函數,它固定了原函數的部分參數。
示例:
from functools import partialdef power(base, exponent): return base ** exponent# 創建一個固定底數為2的新函數square = partial(power, base=2)# 調用新函數只需傳遞指數print(square(3)) # 輸出: 8
用途: 在編寫裝飾器時,保持被裝飾函數的元信息(如名稱、文檔字符串、注解等)不變。
示例:
from functools import wrapsdef add_logging(func): @wraps(func) def wrapper(*args, **kwargs): print(f"Calling {func.__name__} with arguments {args}, {kwargs}") result = func(*args, **kwargs) print(f"{func.__name__} returned: {result}") return result return wrapper@add_loggingdef greet(name): """Greet someone by their name.""" return f"Hello, {name}!"print(greet.__name__) # 輸出: greetprint(greet.__doc__) # 輸出: Greet someone by their name.greet("Alice") # 輸出: Calling greet with arguments ('Alice',), {} 和 "greet returned: Hello, Alice!"
用途: 通過實現一個或少數幾個關鍵比較方法(如 __eq__ 和 __lt__),自動為一個類生成所有必要的比較方法(如 __le__, __gt__, __ge__, __ne__)。
示例:
from functools import total_ordering@total_orderingclass Person: def __init__(self, name, age): self.name = name self.age = age def __eq__(self, other): return self.name == other.name and self.age == other.age def __lt__(self, other): return self.age < other.age# 自動擁有所有比較方法,如 __le__, __gt__, __ge__, __ne__p1 = Person("Alice", 25)p2 = Person("Bob", 30)print(p1 <= p2) # 輸出: Trueprint(p1 > p2) # 輸出: False
用途: 實現函數結果的緩存,以提高性能。基于“最近最少使用”(Least Recently Used, LRU)策略自動丟棄舊的緩存項。
示例:
from functools import lru_cache@lru_cache(maxsize=32)def fibonacci(n): if n < 2: return n return fibonacci(n - 1) + fibonacci(n - 2)# 多次調用相同參數時,從緩存中獲取結果,避免重復計算print(fibonacci(20)) # 第一次調用進行計算print(fibonacci(20)) # 第二次調用直接使用緩存
用途: 對一個可迭代對象(如列表)應用一個累積函數,從左到右將元素兩兩結合,返回單一結果。
示例:
from functools import reducenumbers = [1, 2, 3, 4, 5]# 計算列表元素的乘積product = reduce(lambda x, y: x * y, numbers)print(product) # 輸出: 120
用途: 將舊式的比較函數(接受兩個參數并返回負數、零或正數表示小于、等于或大于)轉換為可用于排序的鍵函數。
示例:
from functools import cmp_to_keydef compare_names(name1, name2): if name1 < name2: return -1 elif name1 > name2: return 1 else: return 0names = ["Alice", "Bob", "Charlie", "David"]# 使用舊式比較函數進行排序sorted_names = sorted(names, key=cmp_to_key(compare_names))print(sorted_names) # 輸出: ['Alice', 'Bob', 'Charlie', 'David']
涵蓋了 functools 模塊中一些常用且重要的功能,包括部分函數應用、裝飾器元信息保留、簡化類比較方法、函數緩存、累積計算以及舊式比較函數的轉換。根據實際需求,可以靈活運用這些工具來增強代碼的簡潔性、效率和可讀性。
本文鏈接:http://www.www897cc.com/showinfo-26-86210-0.htmlPython庫functools示例詳解
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: Python 處理圖片的十個庫
下一篇: C++函數傳遞二維數組的三種方法