def f(a, b, *args):
return (a, b, args)
f(a=3, b=5)
(3, 5,())
considerando quanto segue:Python 3.5 TypeError: got più valori per argomento
f(a=3, b=5, *[1,2,3])
TypeError: got multiple values for argument 'b'
perché si comporta in questo modo?
Qualche ragione in particolare?
Interessante, l'eccezione dà " ha ottenuto più valori per l'argomento di parole chiave 'a' "in python 2.7 e" ha ottenuto più valori per l'argomento 'b' "in python 3.5 – cdarke
@cdarke Quando si usano argomenti di parole chiave ciò che accade è che python costruisce un' d ict' per memorizzare questi argomenti. 'Dict's non ha un ordine affidabile. La differenza nel messaggio di errore riflette questo: usando python2.7 succede che l'hash si comporti in modo che 'a' sia la prima chiave da iterare mentre su python3.5 succede a' b'. Ma dipende completamente da come viene costruito il dizionario, ecc. – Bakuriu
@Bakuriu: ne ero consapevole, ma credo che ci sarebbe dovuto essere un po 'di sforzo per ottenere un messaggio di errore coerente e utile, indipendentemente dall'implementazione interna. Il problema "reale" consiste nell'utilizzare le parole chiave prima degli argomenti posizionali, e questo è l'errore che avrebbe dovuto essere rilevato e segnalato. – cdarke