def myfunc(a,b=2):
print("Called with", a, b)
return
p1 = functools.partial(myfunc, b=4)
p1("foobar", 4)
为什么在运行最后一行时会出现语法错误?如果我这样做,它会起作用:myfunc("foobar", 4)
答案 0 :(得分:4)
'partial'已将'b'设为4;如果你想要另一个值,你应该明确设置参数'b':
>>> p1("foobar")
('Called with', 'foobar', 4)
>>> p1("foobar", b=5)
('Called with', 'foobar', 5)
答案 1 :(得分:0)
因为您在b
电话中提供了functools.partial
。
你的电话应该是这样的:
p1("foobar")
或者您可以在b=4
中摆脱p1 = functools.partial(myfunc, b=4)
并使其成为:
p1 = functools.partial(myfunc)
答案 2 :(得分:0)
我认为这是因为python允许您以任何顺序使用可选参数。使用更多静态类型语言时,通常会在函数/方法中定义的顺序中使用可选参数。因此,例如,在python中这是合法的:
def myfunc(a=1,b=2,c=3):
print a,b,c
myfunc(c=99, b=13, a=12)
因为您可以按任何顺序指定可选参数,我认为python显然需要知道哪些参数分配给哪些本地函数变量。