使用 python 2.7.6 64 位我输入:
>>> def f(a, b=5):
... pass
...
>>> f(b=3)
Run Code Online (Sandbox Code Playgroud)
然后我得到:
TypeError: f() takes at least 1 argument (1 given)
Run Code Online (Sandbox Code Playgroud)
当然我应该得到一些错误,因为我没有给参数赋值a。但是我得到的错误消息并不意味着什么(1 至少是 1)。
这是一个错误,对吧?修好了吗?我找不到任何关于它的信息。
谢谢!
不,这不是错误。
要显示这一点,您可以仅使用a值运行该函数:
def f(a, b=5):
print b
a=1
f(a)
Run Code Online (Sandbox Code Playgroud)
输出:
>>>
5
Run Code Online (Sandbox Code Playgroud)
如您所见,程序打印出的值为b5。您甚至不必传入b函数,因为它已由函数本身定义。
如果你f(b=3)像你一样传递,你会得到一个错误,要求你输入a变量,因为它还没有在任何地方定义。
TypeError: f() takes at least 1 argument (1 given) #You've given 1 value (b=3), but 1 argument ("a" value) is still needed
Run Code Online (Sandbox Code Playgroud)
这就是为什么如果你运行:
>>> f(a=3)
5
Run Code Online (Sandbox Code Playgroud)
您不会收到任何错误,因为该a值已成功传递到函数中。
编辑:
进一步分解:
a并且b是参数当它说时f() takes at least 1 argument,这意味着该函数f() 只能在传递给它的一个参数的情况下使用。但那个单一的论点必须是 a.
你所做的就是传递b=3给它。b是也一个参数(为什么它说,这就是(1 given)你的错误),但它不是“要求”的说法。