Хочу добавить еще один ответ:
Это происходит, когда вы пытаетесь передать позиционный параметр с неправильным порядком позиций вместе с аргументом ключевого слова в вызывающей функции.
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 вместо 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}
self
лучше, чем неявноеthis
.