1
def myfunc(a,b=2):
    print("Called with", a, b)
    return
p1 = functools.partial(myfunc, b=4)
p1("foobar", 4)

为什么我在运行最后一行时会出现语法错误?如果我这样做,它会起作用:myfunc("foobar", 4)

4

3 回答 3

4

'partial' 已经将 'b' 设置为 4;如果你想要另一个值,你应该明确设置参数'b':

>>> p1("foobar")
('Called with', 'foobar', 4)

>>> p1("foobar", b=5)
('Called with', 'foobar', 5)
于 2012-04-13T13:42:11.353 回答
0

b因为您正在为它提供functools.partial呼叫。您的电话应如下所示:

p1("foobar")

或者您可以摆脱b=4inp1 = functools.partial(myfunc, b=4)并使其类似于:

p1 = functools.partial(myfunc)
于 2012-04-13T13:46:39.353 回答
0

我认为这是因为 python 允许您以任何顺序使用可选参数。当您使用更多静态类型的语言时,通常会限制按函数/方法中定义的顺序使用可选参数。因此,例如,在 python 中这是合法的:

def myfunc(a=1,b=2,c=3):
    print a,b,c

myfunc(c=99, b=13, a=12)

因为可以按任意顺序指定可选参数,所以我认为 python 明确需要知道哪些参数分配给了哪些局部函数变量。

于 2012-04-13T13:48:10.613 回答