我很难理解在python函数调用中混合关键字参数和*元组的规则
更具体地说,关于以下代码段
def func(a,b,c):
print("These are the arguments",a,b,c)
args = [2]
#Case 1: expected output "These are the arguments:1,2,3" works fine
func(1,c=3,*args)
#Case 2:expected output "These are the arguments:1,3,2" raises TypeError
func(1,b=3,*args)
我想理解为什么案例1可行,但案例2提出了一个问题
TypeError: func() got multiple values for argument 'b'
根据language reference doc,我认为以上关键字参数和*元组的混合形式是有效的。对不起,如果我错过了一些明显的东西。
在3.4和2.7.6上测试。
答案 0 :(得分:3)
在评估位置参数时不计算关键字参数,因此在后一种情况下,您尝试提供两次b
,一次使用关键字参数,一次使用位置参数。以下方法调用是等效的:
func(1, b=3, *args)
func(1, *args, b=3)
顺便说一句,在CPython实现细节的框架下的链接文档中显示了一个非常相似的示例。