如何在函数上使用functools.partial,该函数具有可调用的参数?

时间:2017-06-30 11:06:58

标签: python partial functools

我试图在一个可调用的函数上使用函数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'

该功能可以适用于该情况吗?

由于

2 个答案:

答案 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)

希望这会对你有所帮助。