函数可以是Python中的KWARG之一吗?
我想使用函数可以是Python中的KWARG之一吗?,python,functional-programming,partial,Python,Functional Programming,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()为参数“al
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()为参数“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函数与其他任何函数一样都是对象。您的问题只是将alpha
作为kwarg传递。
>>> g = partial(B, alpha=alpha, y=2)
>>> g(x=5)
12