函数可以是 Python partial 中的 kwargs 之一吗?

Can a function be one of kwargs in Python partial?

我想使用 functools.partial 来减少我的一个函数中的参数数量。这里有一个问题:一个或多个 kwargs 本身可能是函数。这就是我的意思:

from functools import partial

def B(alpha, x, y):
    return alpha(x)*y

def alpha(x):
    return x+1

g = partial(B, alpha=alpha, y=2)
print(g(5))

这会引发错误:

TypeError: B() got multiple values for argument 'alpha'

partial 可以将函数作为提供的参数处理吗?如果没有,是否有解决方法或比 partial 更通用的方法?

partial 本身并不知道给定的位置参数应该分配给 x 只是因为您为 alpha 指定了关键字参数。如果您希望 alpha 成为特定函数,请将该函数作为位置参数传递给 partial.

>>> g = partial(B, alpha, y=2)
>>> g(5)
12

g 等同于

def g(x):
    return alpha(x) * 2  #  == (x + 1) * 2

或者,您可以使用 g 的原始定义,但一定要将 5 作为关键字参数传递,避免任何额外的位置参数。

>>> g = partial(B, alpha=alpha, y=2)
>>> g(x=5)
12

这是有效的,因为在 gpartial 之间,您已经为所有必需的参数提供了关键字参数,从而消除了对任何位置参数的需要。