首页 > 解决方案 > 函数可以是 Python 部分中的 kwarg 之一吗?

问题描述

我想用它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

标签: pythonfunctional-programmingpartial

解决方案


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,您已经为所有必需的参数提供了关键字参数,从而消除了对任何位置参数的需要。


推荐阅读