使用python 2.7.6 64位我输入:
>>> def f(a, b=5):
... pass
...
>>> f(b=3)
然后我得到:
TypeError: f() takes at least 1 argument (1 given)
当然我应该收到一些错误,因为我还没有为参数a
分配值。但是我得到的错误信息并不意味着什么(1至少为1)。
这是一个错误,对吗?它固定了吗?我无法找到任何相关信息。
谢谢!
答案 0 :(得分:4)
不,这不是一个错误。
要显示此信息,您只需使用a
值运行该功能:
def f(a, b=5):
print b
a=1
f(a)
输出:
>>>
5
正如您所看到的,该程序打印出b
的值为5.您甚至不必将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
这就是为什么你跑:
>>> f(a=3)
5
您不会收到任何错误,因为a
值已成功传递到函数中。
修改强>
进一步分解:
a
和b
是参数当它显示f() takes at least 1 argument
时,表示函数f()
只能使用一个传递给它的参数。但是,单个参数必须 a
。
你做的是将b=3
传递给它。 b
也是一个参数(这就是为什么它在你的错误中说(1 given)
),但它不是"必需的"论点。
答案 1 :(得分:1)
至少需要1个参数,因为你可以省略b并输入1个参数,消息错误不是很有帮助,但也没有错。
答案 2 :(得分:0)
你可以这样想:
句子的第一部分是计算方法签名中没有默认值的参数数量(因此,必需的参数)。
句子的第二部分是计算实际传递给方法的参数总数,无论它们是否被指定为关键字,位置,或者方法签名是否具有默认值。
这不是一个非常有用的错误消息,但从技术上讲它也不是错误的。正如其他人所说,Python 3版本更好一点,因为它明确指出缺少位置参数。