Je veux ajouter une autre réponse:
Cela se produit lorsque vous essayez de transmettre un paramètre de position avec un ordre de position incorrect avec un argument de mot-clé dans la fonction d'appel.
there is difference between parameter and argument
vous pouvez lire en détail ici Arguments et paramètres en 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 de position
b = 1 est le mot-clé et le paramètre par défaut
* args est un paramètre de longueur variable
donc nous affectons d'abord un comme paramètre de position, ce qui signifie que nous devons fournir une valeur à l'argument de position dans son ordre de 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, en le traitant comme un argument mot-clé. maintenant a deux valeurs:
l'un est la valeur de position: a = 1
la seconde est la valeur mot-clé qui est a = 12
Solution
Nous devons changer hello(1, 2, 3, 4,a=12)
pour hello(1, 2, 3, 4,12)
que maintenant a n'obtienne qu'une seule valeur de position qui est 1 et b obtiendra la valeur 2 et le reste des valeurs obtiendra * args (paramètre de longueur variable)
Information additionnelle
si nous voulons que * args obtienne 2,3,4 et a devrait obtenir 1 et b devrait obtenir 12
alors on peut faire comme ça
def hello(a,*args,b=1):
pass
hello(1, 2, 3, 4,b=12)
Quelque chose de 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)
production :
1
(2, 1, 2, 8, 9)
1
{'c': 12}
self
est préférable à l'implicitethis
.