Je veux ajouter une réponse de plus :
Cela se produit lorsque vous essayez de passer un paramètre positionnel avec un ordre de position incorrect ainsi qu'un argument clé lors de l'appel d'une fonction.
il y a une différence entre paramètre et argument
que vous pouvez lire en détail ici Arguments and Parameter in python
def hello(a,b=1, *args):
print(a, b, *args)
hello(1, 2, 3, 4,a=12)
puisque nous avons trois paramètres :
a est un paramètre positionnel
b=1 est un paramètre de mot-clé et par défaut
*args est un paramètre de longueur variable
donc nous attribuons d'abord a comme paramètre positionnel, cela signifie que nous devons fournir une valeur à l'argument positionnel dans l'ordre de sa position, ici l'ordre est important. mais nous passons l'argument 1 à la place de a dans la fonction d'appel, puis nous fournissons également une valeur à a, considérée comme un argument clé. maintenant a a deux valeurs :
une est une valeur positionnelle: a=1
la deuxième est une valeur clé qui est a=12
Solution
Nous devons modifier hello(1, 2, 3, 4,a=12)
en hello(1, 2, 3, 4,12)
maintenant a ne recevra qu'une seule valeur positionnelle qui est 1 et b recevra la valeur 2 et le reste des valeurs recevront *args (paramètre de longueur variable)
informations supplémentaires
si nous voulons que *args obtienne 2,3,4 et que a obtienne 1 et que b obtienne 12
alors nous pouvons le faire comme ceci
def hello(a,*args,b=1): pass hello(1, 2, 3, 4,b=12)
Quelque chose en plus :
def hello(a,*c,b=1,**kwargs):
print(b)
print(c)
print(a)
print(kwargs)
hello(1,2,1,2,8,9,c=12)
sortie :
1
(2, 1, 2, 8, 9)
1
{'c': 12}