🧩 Python 小練習系列 | Vol.14:掌握偏函數 partial,用函數更絲滑!
本節的 Python 小練習系列我們將聚焦一個 冷門但高能 的工具 ——
functools.partial
。它的作用類似于“函數的預設模板”,能幫你寫出更加靈活、優雅的代碼。
🎯 本題目標
- 理解什么是偏函數;
- 學會使用
functools.partial
; - 編寫一個帶偏函數的實戰案例;
- 思考偏函數的常見使用場景。
🧠 偏函數是什么?
偏函數(Partial Function)是指:預先為某個函數的部分參數設定默認值,返回一個新的函數對象。
在 Python 中我們可以用 functools.partial
來實現。
? 示例一:最經典的使用場景
from functools import partialdef power(base, exponent):return base ** exponent# 創建一個求平方的函數
square = partial(power, exponent=2)# 創建一個求立方的函數
cube = partial(power, exponent=3)print(square(5)) # 25
print(cube(2)) # 8
本質上:
square(x)
就等價于power(x, 2)
,是不是很絲滑?
🎮 小練習:構建一個“偏好設置”函數生成器
場景說明:
你在寫一個電商網站的消息通知系統,需要根據用戶的偏好設置通知行為,比如:
def send_notification(user, channel, content):print(f"To {user}, via {channel}: {content}")
你希望提前為“微信渠道”做一個專用函數:
from functools import partialsend_by_wechat = partial(send_notification, channel="WeChat")send_by_wechat("小明", content="你有一筆訂單已發貨")
輸出:
To 小明, via WeChat: 你有一筆訂單已發貨
是不是代碼變得更清晰、更“可讀”了?
📌 實戰題:構建簡化版 API 請求工具
原始方法:
def make_request(method, url, headers=None, data=None):print(f"Request: [{method}] {url}")print(f"Headers: {headers}")print(f"Data: {data}")
使用偏函數預設請求類型:
from functools import partialpost_json = partial(make_request,method="POST",headers={"Content-Type": "application/json"}
)post_json(url="http://example.com/api", data='{"name": "chatgpt"}')
? 進階挑戰
嘗試封裝一個函數生成器,自動創建多個“預設模板函數”:
def create_sender(channel):return partial(send_notification, channel=channel)send_by_sms = create_sender("SMS")
send_by_email = create_sender("Email")send_by_sms("小紅", content="驗證碼:123456")
send_by_email("小藍", content="歡迎注冊我們的平臺")
📚 總結
知識點 | 說明 |
---|---|
functools.partial | 用于“鎖定”函數部分參數,返回新函數 |
使用場景 | API封裝、回調函數、事件處理、參數綁定等 |
優勢 | 簡化函數調用,提高可讀性、復用性 |
? 推薦延伸閱讀
lambda
vspartial
:什么時候該用哪個?- 偏函數在
tkinter
GUI 編程中的應用; - functools.partialmethod 用于類的方法綁定(進階)。
🧩 最后一題
嘗試完成這個練習:
寫一個偏函數
rmb_to_usd
,假設當前匯率是 7.2,使用它將多個人民幣金額轉換為美元。
提示:
def exchange(amount, rate):return amount * rate# TODO:補全偏函數定義
🧃 如果這題你喜歡:
📌 點個贊 / ? 收藏 / 💬 留個言支持我繼續更新python小練習系列吧!