Python3 使用 functools.partial 减少可调用对象参数个数
本文介绍如何利用 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 的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









