Python3 使用 functools.partial 减少可调用对象参数个数

今天早睡
今天早睡
发布时间:2026-10-11| 4人浏览过
原创

本文介绍如何利用 Python3 的 functools.partial 模块减少可调用对象的参数个数。通过 partial() 函数,可以为一个或多个参数设置固定值,返回一个新的可调用对象。该对象接受未赋值的参数,并将未赋值参数与已赋值参数合并,最终将所有参数传递给原始函数。文章还展示了 partial() 在列表排序中的应用,以及如何用 lambda 表达式实现相同效果。

使用 functools.partial() 减少函数参数个数

在 Python 中,functools.partial() 是一个非常有用的工具,它允许我们给一个或多个参数设置固定值,从而减少可调用对象的参数个数。partial() 返回一个新的可调用对象,这个新对象接受未赋值的参数,并将未赋值参数与已赋值参数合并,最终将所有参数传递给原始函数。

partial() 的基本用法

下面是一个简单的示例,展示了如何使用 partial() 来减少函数的参数个数:

def func(a, b, c, d):
  print(a, b, c, d)

通过 partial(),我们可以为部分参数设置固定值:

from functools import partial

s1 = partial(func, 1) # a = 1
print(s1(2, 3, 4))
(1, 2, 3, 4)

s2 = partial(func, d=100)  # d = 100
print(s2(1, 2, 3))
(1, 2, 3, 100)

s3 = partial(func, 1, 2, d=100) # a = 1, b = 2, d = 100
print(s3(3))
(1, 2, 3, 100)

在上面的示例中,s1 是一个新的可调用对象,它接受三个参数(b, c, d),并将它们与固定值 a=1 合并,最终调用 func(1, 2, 3, 4)。

partial() 在列表排序中的应用

Python 的列表 sort() 方法接受一个关键字参数 key,用于设置排序逻辑。这个 key 参数只能接受单参数函数。然而,我们有时需要处理多参数函数,这时就可以使用 partial() 来将多参数函数适配为单参数形式。

以下是一个计算两点间距离的示例:

import math

points = [(1, 2), (3, 4), (5, 6), (7, 8)]
pt = (4, 3)

def distance(p1, p2):
  x1, y1 = p1
  x2, y2 = p2
  return math.hypot(x2 - x1, y2 - y1)

我们可以使用 partial() 来创建一个单参数的排序函数:

points.sort(key=partial(distance, pt))
print(points)
[(3, 4), (1, 2), (5, 6), (7, 8)]

在这个示例中,partial(distance, pt) 创建了一个新的可调用对象,它接受一个参数 p2,并将 pt 作为 p1 的值传递给 distance() 函数。

使用 lambda 表达式实现相同效果

除了 partial(),我们还可以使用 lambda 表达式来实现相同的效果:

points.sort(key=lambda x: distance(pt, x))
print(points)
[(3, 4), (1, 2), (5, 6), (7, 8)]

在这个示例中,lambda x: distance(pt, x) 创建了一个单参数的匿名函数,它接受一个参数 x,并调用 distance(pt, x)。

总结

通过 functools.partial(),我们可以轻松减少可调用对象的参数个数,这在处理复杂函数时非常有用。无论是使用 partial() 还是 lambda 表达式,都可以实现相同的效果。在实际开发中,可以根据具体需求选择合适的方法。

以上就是 Python3 实现减少可调用对象的参数个数的详细内容,更多关于 Python 的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。