Я хочу додати ще одну відповідь:
Це трапляється, коли ви намагаєтеся передати позиційний параметр із неправильним порядком позиції разом із аргументом ключового слова у функції виклику.
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 - параметр змінної довжини
тому ми спочатку призначаємо як позиційний параметр, це означає, що ми повинні надати значення позиційному аргументу у його позиційному порядку, тут порядок має значення. але ми передаємо аргумент 1 на місце функції виклику, і тоді ми також надаємо значення a, трактуючи як аргумент ключового слова. тепер у a є два значення:
одне - позиційне значення: a = 1
друге - ключове слово, яке є = 12
Рішення
Ми повинні змінитись, hello(1, 2, 3, 4,a=12)
щоб hello(1, 2, 3, 4,12)
тепер a отримає лише одне позиційне значення, яке дорівнює 1, а b отримає значення 2, а решта значень отримають * 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
.