函数可以是 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
这是有效的,因为在 g
和 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
这是有效的,因为在 g
和 partial
之间,您已经为所有必需的参数提供了关键字参数,从而消除了对任何位置参数的需要。