函数可以是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