【发布时间】:2018-09-03 05:25:27
【问题描述】:
def f(a,*b):
print(a,b)
对于上面定义的函数 f,如果我调用 f(1, *(2,3)),它会按预期打印 1, (2,3)。
但是调用f(a=1, *(2,3)) 会导致错误:
TypeError: f() 为参数 'a' 获得了多个值
任何位置参数也可以作为显式关键字参数提供。
f(a=1, *(2,3)) 应该只有一种解释,没有歧义。
【问题讨论】:
-
The docs 解释一下:“首先,为形参创建一个未填充槽的列表。如果有 N 个位置参数,则将它们放在前 N 个槽中。接下来,对于每个关键字参数,标识符用于确定对应的槽(如果标识符与第一个形参名称相同,则使用第一个槽,依此类推)。如果槽已被填满,则引发 TypeError 异常。
-
@Amadan,感谢您的链接。实际上我正在阅读“Learning Python 5ed”,我认为(发现)书中提到的内容与 python 文档相矛盾。