我想使用 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
这是有效的,因为在 g
和 partial
之间,您已经为所有必需参数提供了关键字参数,从而消除了对任何位置参数的需要。
关于python - 函数可以是 Python 部分中的 kwargs 之一吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60739920/