page contents

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

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

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

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

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

基本语法:真的很简单
刚开始接触 partial() 时,我还以为会有很多门道,结果发现用起来超级直接。

只需要引入:

from functools import partial
然后给函数“锁定”几个参数:

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

def calculate_bmi(height: float, weight: float) -> str:
    bmi = weight / (height ** 2)
    return f"您的 BMI 是 {bmi:.2f}"

# 身高写死
bmi_for_my_height = partial(calculate_bmi, height=1.75)

# 每次只输体重
print(bmi_for_my_height(weight=63))  # 输出:您的 BMI 是 20.57
print(bmi_for_my_height(weight=66))  # 输出:您的 BMI 是 21.55
就加了一行 partial(),结果却是:更清晰的函数调用,更少的重复操作,真正“量身定做”的感觉。

天气预报函数,把城市锁定
以前我写天气预报,总要每次传入城市名。

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

from functools import partial

def weather_report(city: str, temp: int, rain: bool) -> str:
    return f"""当前{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 partial

print_with_newline = partial(print, sep="\n")

print_with_newline("姓名:小李", "年龄:24", "宠物:咪咪")
直接搞定。无需新函数、无须封装,代码干净利落,阅读体验也更舒服。

partial vs lambda:谁更合适?
用熟了 partial() 之后,我也开始对比它和 lambda 函数的差异。

partial 函数适合:
基于现有函数 去定制新版本(预填参数)
保持结构清晰,特别适合大项目复用
阅读性更好,看得出是“一个原函数的变种”
from functools import partial

def power(base, exponent):
    return base ** exponent

square = partial(power, exponent=2)
print(square(5))  # 输出 25
lambda 函数适合:
快速写一段“一次性小函数”
灵活、轻便,适合临时处理逻辑
square = lambda base: base ** 2
print(square(5))  # 输出 25
我的选择是:结构清晰的场景用 partial(),写脚本或一两行逻辑就 lambda 搞定。

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

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

2. 减少重复代码
避免反复传同样的参数,写一次、用到底。

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

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

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

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

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

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1819 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 1819 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章