我想再添加一个答案:
当您尝试在调用函数中尝试传递位置顺序错误的位置参数以及关键字参数时,就会发生这种情况。
there is difference between parameter and argument
您可以在此处详细了解python中的参数和参数
def hello(a,b=1, *args):
print(a, b, *args)
hello(1, 2, 3, 4,a=12)
因为我们有三个参数:
a是位置参数
b = 1是关键字和默认参数
* args是可变长度参数
因此我们首先将a作为位置参数赋值,这意味着我们必须按位置顺序向位置参数提供值,这里顺序很重要。但是我们将参数1传递给in调用函数中的位置,然后还将值提供给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}
self
优于隐式的问题,您将永远无法获得满意的答案this
。