当前位置: 首页 > news >正文

Python 小练习系列 | Vol.14:掌握偏函数 partial,用函数更丝滑!

🧩 Python 小练习系列 | Vol.14:掌握偏函数 partial,用函数更丝滑!

本节的 Python 小练习系列我们将聚焦一个 冷门但高能 的工具 —— functools.partial。它的作用类似于“函数的预设模板”,能帮你写出更加灵活、优雅的代码。


🎯 本题目标

  • 理解什么是偏函数;
  • 学会使用 functools.partial
  • 编写一个带偏函数的实战案例;
  • 思考偏函数的常见使用场景。

🧠 偏函数是什么?

偏函数(Partial Function)是指:预先为某个函数的部分参数设定默认值,返回一个新的函数对象

在 Python 中我们可以用 functools.partial 来实现。


✅ 示例一:最经典的使用场景

from functools import partial

def 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 partial

send_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 partial

post_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小练习系列吧!

相关文章:

  • 和DeepSeek聊高速公路定向广播
  • NO.79十六届蓝桥杯备战|数据结构-扩展域并查集-带权并查集|团伙|食物链|银河英雄传说(C++)
  • CesiumEarth v1.12 更新,支持安卓平板离线浏览3DTiles格式的三维倾斜模型
  • 【计网】作业4
  • 树和图论(详细整理,简单易懂!)
  • AutoGLM沉思使用方式
  • 【已完结STM32】--自学江协科技笔记汇总
  • WHAT - React 元素接收的 ref 详解
  • 最新Spring Security实战教程(九)前后端分离认证实战 - JWT+SpringSecurity无缝整合
  • 进程间通信-共享内存
  • 辛格迪客户案例 | 河南宏途食品实施电子合约系统(eSign)
  • Wideband Sparse Reconstruction for Scanning Radar论文阅读
  • Linux网络配置与测试
  • 鸿蒙小案例-京东登录
  • 记录IBM服务器检测到备份GPT损坏警告排查解决过程
  • 信息系统项目管理师-第十四章-项目沟通管理
  • 收敛算法有多少?
  • 一周学会Pandas2 Python数据处理与分析-Pandas2一维数据结构-Series
  • k8s创建一个pod,查看状态和详细信息,进入pod,以及删除这个pod
  • 智能指针C++11
  • 明天起,沪苏湖高铁、杭温高铁推出13款新型票制产品
  • 售卖自制外挂交易额超百万元,一男子因提供入侵计算机系统程序被抓
  • 特朗普称美军舰商船应免费通行苏伊士运河,外交部:反对任何霸凌言行
  • 潘功胜:央行将创设科技创新债券风险分担工具
  • 何立峰将访问瑞士、法国并举行中美经贸高层会谈、第十次中法高级别经济财金对话
  • 默茨在第二轮投票中当选德国总理