我正在尝试在具有参数的函数的可调用对象上使用模块函数工具部分的函数。 我想出了一个极简主义的示例代码。
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'
该函数可以处理这种情况吗?
谢谢
它不链接到参数的类型,(部分(函数调用遵循规则 https://docs.python.org/2/reference/expressions.html#calls 位置参数放置在第一个参数插槽中,然后如果 *expression 存在,则解压缩表达式并将其放置在下一个插槽中,最后如果存在 **表达式,则表达式映射到函数参数,如果参数已绑定到参数,则引发错误。
所以
p2 = partial( g, f=cube)
p2(3) # fails
与调用相同
g(3, f=cube)
你可以参考 python 文档中的 partial 方法
部分我们不能传递两个函数,所以这可能是问题所在。尝试传递一个函数对象,第二个参数是函数参数。
你可以使用它,
p2 = partial(g, f=cube, x=1)
abc = p2(x=3)
print(abc)
希望这对您有所帮助。