Python 小練習系列 | Vol.14:掌握偏函數 partial,用函數更絲滑!

🧩 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 vs partial:什么時候該用哪個?
  • 偏函數在 tkinter GUI 編程中的應用;
  • functools.partialmethod 用于類的方法綁定(進階)。

🧩 最后一題

嘗試完成這個練習:

寫一個偏函數 rmb_to_usd,假設當前匯率是 7.2,使用它將多個人民幣金額轉換為美元。

提示:

def exchange(amount, rate):return amount * rate# TODO:補全偏函數定義

🧃 如果這題你喜歡:

📌 點個贊 / ? 收藏 / 💬 留個言支持我繼續更新python小練習系列吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75088.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75088.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75088.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源 PDF.js 文件編輯操作

一、PDF.js PDF.js 是 Mozilla 基金會推出的一個使用 HTML5 構建的 PDF 閱讀器,它完全使用 JavaScript 編寫。作為 Firefox 瀏覽器的默認 PDF 查看器,PDF.js 具有強大的兼容性和穩定性。它不僅支持 PDF 文件的查看和渲染,還提供了豐富的交互…

3D珠寶渲染用什么軟件比較好?渲染100邀請碼1a12

印度珠寶商 Mohar Fine Jewels 和英國寶石商 Gemfields 在今年推出了合作珠寶系列——「Emeralds in Full Bloom」,它的靈感源自花草綻放的春季田野,共有 39 件作品,下面這個以植物為主題的開口手鐲就是其中一件。 在數字時代,像這…

增益調度控制 —— 理論、案例與交互式 GUI 實現

目錄 增益調度控制 —— 理論、案例與交互式 GUI 實現一、引言二、增益調度控制的基本原理三、數學模型與公式推導四、增益調度控制的優勢與局限4.1 優勢4.2 局限五、典型案例分析5.1 案例一:航空飛行控制中的增益調度5.2 案例二:發動機推力控制中的增益調度5.3 案例三:化工…

PyTorch數據加載流程解析

1. 定義最簡單的Dataset import torch from torch.utils.data import Dataset, DataLoaderclass MyDataset(Dataset):def __init__(self, data):self.data data # 假設data是一個列表,如[10, 20, 30, 40]def __len__(self):return len(self.data) # 返回數據總量…

xsync腳本是一個基于rsync的工具

xsync腳本是一個基于rsync的工具,用于在集群間高效同步文件或目錄。以下是xsync腳本的詳細使用方法和配置步驟: 一、xsync腳本的作用 xsync腳本可以快速將文件或目錄分發到集群中的多個節點,避免了手動逐臺復制文件的繁瑣操作。它利用rsync…

250408_解決加載大量數據集速度過慢,耗時過長的問題

250408_解決加載Cifar10等大量數據集速度過慢,耗時過長的問題(加載數據時多線程的坑) 在做Cifar10圖像分類任務時,發現每個step時間過長,且在資源管理器中查看顯卡資源調用異常,主要表現為,顯卡…

Ansible的使用2

#### 一、Ansible變量 ##### facts變量 > facts組件是Ansible用于采集被控節點機器的設備信息,比如IP地址、操作系統、以太網設備、mac 地址、時間/日期相關數據,硬件信息等 - setup模塊 - 用于獲取所有facts信息 shell ## 常用參數 filter…

多模態大語言模型arxiv論文略讀(六)

FashionLOGO: Prompting Multimodal Large Language Models for Fashion Logo Embeddings ?? 論文標題:FashionLOGO: Prompting Multimodal Large Language Models for Fashion Logo Embeddings ?? 論文作者:Zhen Wang, Da Li, Yulin Su, Min Yang,…

MySQL深入

體系結構 連接層:主要處理客戶端的連接進行授權認證、校驗權限等相關操作 服務層:如sql的接口、解析、優化在這里完成,所有跨存儲引擎的操作在這里完成 引擎層:索引是在存儲引擎層實現的,所以不同的存儲引擎他的索引…

智能 SQL 優化工具 PawSQL 月度更新 | 2025年3月

📌 更新速覽 本月更新包含 21項功能增強 和 9項問題修復,重點提升SQL解析精度與優化建議覆蓋率。 一、SQL解析能力擴展 ? 新增SQL語法解析支持 SELECT...INTO TABLE 語法解析(3/26) ALTER INDEX RENAME/VISIBLE 語句解析&#…

數組劃分使元素總和最接近

0劃分 - 藍橋云課 將一個數組劃分為兩個元素總和最接近的兩個數組 要使得兩組權值的乘積最大,根據數學原理,當兩組權值越接近時,它們的乘積就越大。因此,可以將這個問題轉化為一個 0 - 1 背包問題,把所有數的總和的一…

多線程代碼案例(線程池)- 4

目錄 引入 標準庫中的線程池 -- ThreadPoolExecutor 研究一下這個方法的幾個參數 1. int corePoolSize 2. int maximumPoolSize 3. long keepAliveTime 4. TimeUnit unit 5. BolckingQueue workQueue 6. ThreadFactory threadFactory 7. RejectedExecutionHandler h…

C,C++,C#

C、C 和 C# 是三種不同的編程語言,雖然它們名稱相似,但在設計目標、語法特性、運行環境和應用場景上有顯著區別。以下是它們的核心區別: 1. 設計目標和歷史 語言誕生時間設計目標特點C1972(貝爾實驗室)面向過程&#…

nginx 代理 https 接口

代碼中需要真實訪問的接口是:https://sdk2.028lk.com/application-localizationdev.yml文件中配置: url: http:/111.34.80.138:18100/sdk2.028lk.com/該服務器111.34.80.138上 18100端口監聽,配置信息為: location /sdk2.028lk.c…

數據結構實驗3.1:順序棧的基本操作與進制轉換

文章目錄 一,問題描述二,基本要求三,算法分析四,示例代碼五,實驗操作六,運行效果 一,問題描述 在數據處理中,常常會遇到需要對鏈接存儲的線性表進行操作的情況。本次任務聚焦于將鏈…

經典頻域分析法(Bode圖、Nyquist判據) —— 理論、案例與交互式 GUI 實現

目錄 經典頻域分析法(Bode圖、Nyquist判據) —— 理論、案例與交互式 GUI 實現一、引言二、經典頻域分析方法的基本原理2.1 Bode 圖分析2.2 Nyquist 判據三、數學建模與公式推導3.1 一階系統的頻域響應3.2 多極系統的 Bode 圖繪制3.3 Nyquist 判據的數學描述四、經典頻域分析…

Vue知識點(5)-- 動畫

CSS 動畫是 Vue3 中實現組件動畫效果的高效方式,主要通過 CSS transitions 和 keyframes 動畫 CSS Keyframes(關鍵幀動畫) 用來創建復雜的動畫序列,可以精確控制動畫的各個階段。 核心語法: keyframes animationNa…

小型園區網實驗

劃分VLAN SW3 [sw3]vlan batch 2 3 20 30 [sw3]interface GigabitEthernet 0/0/1 [sw3-GigabitEthernet0/0/1]port link-type access [sw3-GigabitEthernet0/0/1]port default vlan 2 [sw3-GigabitEthernet0/0/1]int g0/0/2 [sw3-GigabitEthernet0/0/2]port link-type acces…

使用LangChain Agents構建Gradio及Gradio Tools(6)——創建自己的GradioTool

使用LangChain Agents構建Gradio及Gradio Tools(6)——創建自己的GradioTool 本篇摘要16. 使用LangChain Agents構建Gradio及Gradio Tool16.6 創建自己的GradioTool16.6.1 創建步驟16.6.2 創建示例StableDiffusionTool參考文獻本章目錄如下: 《使用LangChain Agents構建Grad…

SDL顯示YUV視頻

文章目錄 1. **宏定義和初始化**2. **全局變量**3. **refresh_video_timer 函數**4. **WinMain 函數**主要功能及工作流程:總結: 1. 宏定義和初始化 #define REFRESH_EVENT (SDL_USEREVENT 1) // 請求畫面刷新事件 #define QUIT_EVENT (SDL…