我想再添加一个答案:
当您尝试在调用函数中传递位置顺序错误的位置参数以及关键字参数时,就会发生这种情况。
there is difference between parameter and argument
你可以在这里详细阅读Arguments and Parameter in python
def hello(a,b=1, *args):
print(a, b, *args)
hello(1, 2, 3, 4,a=12)
因为我们有三个参数:
a 是位置参数
b=1 是关键字和默认参数
*args 是变长参数
所以我们首先将 a 指定为位置参数,这意味着我们必须按照位置参数的位置顺序为位置参数提供值,这里的顺序很重要。但是我们在调用函数中将参数 1 传递给 a ,然后我们也为 a 提供值,将其视为关键字参数。现在 a 有两个值:
一是位置值:a=1
第二个是关键字值,即 a=12
解决方案
我们必须更改hello(1, 2, 3, 4,a=12)
为hello(1, 2, 3, 4,12)
,现在 a 将仅获得一个位置值,即 1,b 将获得值 2,其余值将获得 *args(可变长度参数)
附加信息
如果我们希望 *args 应该得到 2,3,4 并且 a 应该得到 1 并且 b 应该得到 12
那么我们可以这样做
def hello(a,*args,b=1):
pass
hello(1, 2, 3, 4,b=12)
更多的东西:
def hello(a,*c,b=1,**kwargs):
print(b)
print(c)
print(a)
print(kwargs)
hello(1,2,1,2,8,9,c=12)
输出 :
1
(2, 1, 2, 8, 9)
1
{'c': 12}