我试图在一个可调用的函数上使用函数partial from functools,它有一个参数是一个函数。 我提出了极简主义的示例代码。
from functools import partial
def g(f, x):
return f(x)
def cube(x):
return x*x*x
p1 = partial(g, x=3)
abc = p1(cube) # works
p2 = partial( g, f=cube)
abc = p2(3) # fails TypeError: g() got multiple values for keyword argument 'f'
该功能可以适用于该情况吗?
由于
答案 0 :(得分:1)
它不是参数类型的链接,(部分)函数调用遵循规则https://docs.python.org/2/reference/expressions.html#calls 位置参数放在第一个参数槽中,如果存在* expression,则表达式解压缩并放在下一个槽中,最后如果存在**表达式,则表达式将映射到函数参数,如果参数已经存在,则抛出错误绑定参数。
所以
p2 = partial( g, f=cube)
p2(3) # fails
与调用
相同g(3, f=cube)
答案 1 :(得分:0)
您可以参考python doc
中的部分方法在局部我们不能传递两个函数,所以这可能是问题。尝试传递一个函数对象,第二个arg是函数参数。
你可以使用它,
p2 = partial(g, f=cube, x=1)
abc = p2(x=3)
print(abc)
希望这会对你有所帮助。