Voglio aggiungere un'altra risposta:
Succede quando si tenta di passare un parametro posizionale con un ordine di posizione errato insieme all'argomento della parola chiave nella funzione di chiamata.
there is difference between parameter and argument
puoi leggere in dettaglio qui Argomenti e Parametri in Python
def hello(a,b=1, *args):
print(a, b, *args)
hello(1, 2, 3, 4,a=12)
poiché abbiamo tre parametri:
a è un parametro posizionale
b = 1 è la parola chiave e il parametro predefinito
* args è un parametro di lunghezza variabile
quindi prima assegniamo un parametro posizionale, significa che dobbiamo fornire valore all'argomento posizionale nel suo ordine di posizione, qui l'ordine conta. ma stiamo passando l'argomento 1 al posto di una funzione di chiamata e quindi stiamo fornendo anche valore a, trattando come argomento di parola chiave. ora a hanno due valori:
uno è il valore posizionale: a = 1
il secondo è un valore con parole chiave che è a = 12
Soluzione
Dobbiamo passare hello(1, 2, 3, 4,a=12)
a hello(1, 2, 3, 4,12)
così ora a otterrà solo un valore posizionale che è 1 e b otterrà valore 2 e il resto dei valori otterrà * args (parametro di lunghezza variabile)
Informazioni aggiuntive
se vogliamo che * args dovrebbe ottenere 2,3,4 e a dovrebbe ottenere 1 e b dovrebbe ottenere 12
allora possiamo fare così
def hello(a,*args,b=1):
pass
hello(1, 2, 3, 4,b=12)
Qualcosa in più :
def hello(a,*c,b=1,**kwargs):
print(b)
print(c)
print(a)
print(kwargs)
hello(1,2,1,2,8,9,c=12)
produzione :
1
(2, 1, 2, 8, 9)
1
{'c': 12}
self
sia meglio che implicitothis
.