当前位置:首页>python>这个被你忽略的 Python 宝藏函数

这个被你忽略的 Python 宝藏函数

  • 2026-09-02 20:24:22
这个被你忽略的 Python 宝藏函数
关注+星标,每天学习Python新技能

来源:网络

还记得我第一次看到 functools.partial 的时候,完全不知道它是干嘛的,扫一眼就跳过去了,以为是某种没什么用的骚操作。

结果过了几年,写了几个实际项目之后,我才意识到:partial() 不但让我的代码更简洁、更易复用,甚至写起来都更顺手。

简单来说,partial函数可以“预先填好一部分参数”,让你后续调用的时候不用每次都重复输一遍。就像是给某个函数做了一个定制版小封装。

这篇文章就带你搞清楚 partial() 的用法、实战场景,以及它为什么可能是你还没用过的“最干净的代码优化工具”。

基本语法:真的很简单

刚开始接触 partial() 时,我还以为会有很多门道,结果发现用起来超级直接。

只需要引入:

from functools import partial

然后给函数“锁定”几个参数:

deffunc(arg1, arg2, arg3):pass# 原始函数# 固定前两个参数partial_func = partial(func, arg_a, arg_b)# 只需要传剩下的参数result = partial_func(arg3)

就是这么简单。这个新的 partial_func 跟原始的 func 本质上是同一个逻辑,只是你不用每次都填满所有参数。

我后来在项目里大量用来优化回调函数、简化配置参数多的函数,效果立竿见影。

定制化的 BMI 计算器

我真正体会到 partial() 带来的快乐,是在写一个 BMI 计算器时。

当时我在追踪体重变化,但每次都要手动填身高,重复得我头都大了。

于是我干脆用 partial() 把身高参数锁死,只管传变化的体重值就行:

from functools import partialdefcalculate_bmi(height: float, weight: float) -> str:    bmi = weight / (height ** 2)returnf"您的 BMI 是 {bmi:.2f}"# 身高写死bmi_for_my_height = partial(calculate_bmi, height=1.75)# 每次只输体重print(bmi_for_my_height(weight=63))  # 输出:您的 BMI 是 20.57print(bmi_for_my_height(weight=66))  # 输出:您的 BMI 是 21.55

就加了一行 partial(),结果却是:更清晰的函数调用,更少的重复操作,真正“量身定做”的感觉。


天气预报函数,把城市锁定

以前我写天气预报,总要每次传入城市名。

后来想了下,不如直接把城市锁死,用 partial() 实现一个“专属城市的天气播报器”:

from functools import partialdefweather_report(city: str, temp: int, rain: bool) -> str:returnf"""当前{city}气温:{temp}℃。是否下雨:{'是'if rain else'否'}"""# 普通用法print(weather_report('北京', 30, True))# 城市锁定为“上海”shanghai_weather = partial(weather_report, city="上海")print(shanghai_weather(temp=28, rain=False))

遇到重复参数,这招特别好用。锁住它、别再反复传,让代码更“懂你”。

partial + 内置函数:还能这么玩?

partial() 也能搭配内置函数一起用,比如我有段时间很想让 print() 每次输出都换行分隔(而不是默认空格)。

那就这样写:

from functools import partialprint_with_newline = partial(print, sep="\n")print_with_newline("姓名:小李", "年龄:24", "宠物:咪咪")

直接搞定。无需新函数、无须封装,代码干净利落,阅读体验也更舒服。

partial vs lambda:谁更合适?

用熟了 partial() 之后,我也开始对比它和 lambda 函数的差异。

partial 函数适合:

  • 基于现有函数 去定制新版本(预填参数)
  • 保持结构清晰,特别适合大项目复用
  • 阅读性更好,看得出是“一个原函数的变种”
from functools import partialdefpower(base, exponent):return base ** exponentsquare = partial(power, exponent=2)print(square(5))  # 输出 25

lambda 函数适合:

  • 快速写一段“一次性小函数”
  • 灵活、轻便,适合临时处理逻辑
square = lambda base: base ** 2print(square(5))  # 输出 25

我的选择是:结构清晰的场景用 partial(),写脚本或一两行逻辑就 lambda 搞定。

partial() 的五大好处

用了 partial() 之后,以下几点是我真切体会到的提升:

1. 复用性强

不用每次都复制函数或写包装函数,锁住参数之后直接重用。

2. 减少重复代码

避免反复传同样的参数,写一次、用到底。

3. 提高可读性

预设参数让函数名更直观,调用时也能清晰地看出“这函数已经定制好部分功能”。

4. 快速定制函数

你不需要重写函数逻辑,只需设定默认参数,就能生成一个“专属版本”。

5. 增强模块化

把复杂任务拆成几个 partial() 定制的小任务,结构更清晰、维护更方便。

总结一下

partial() 真的是那种用过一次就再也离不开的工具,它不会改变你的函数逻辑,但能大大优化你的代码结构和开发体验。

如果你还没用过 partial(),不妨试试。它可能会成为你 Python 工具箱里最“安静但强大”的一员。

长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等

推荐阅读

用 Python 内置缓存替代 Redis

Python操作K8s API:运维常用实战与性能稳定性对比

不仅是圆周率,Python 3.14 这一次要带我们突破性能的边界

为什么你的 Python 项目应该使用 Enum

点击 阅读原文 了解更多

最新文章

随机文章