在python函数调用中混合关键字参数和*元组的规则是什么

时间:2015-02-14 00:02:07

标签: python python-3.x python-2.x

我很难理解在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上测试。

1 个答案:

答案 0 :(得分:3)

在评估位置参数时不计算关键字参数,因此在后一种情况下,您尝试提供两次b,一次使用关键字参数,一次使用位置参数。以下方法调用是等效的:

func(1, b=3, *args)
func(1, *args, b=3)

顺便说一句,在CPython实现细节的框架下的链接文档中显示了一个非常相似的示例。