def f(a, b, *args):
return (a, b, args)
f(a=3, b=5)
(3, 5,())
während:Python 3.5 Typeerror: got mehrere Werte für Argument
f(a=3, b=5, *[1,2,3])
TypeError: got multiple values for argument 'b'
Warum es so verhält?
Irgendein besonderer Grund?
Interessant, die Ausnahme gibt " hat mehrere Werte für das Schlüsselwortargument 'a' "in Python 2.7 und" hat mehrere Werte für das Argument 'b' "in python 3.5 – cdarke
@cdarke Bei der Verwendung von Schlüsselwortargumenten passiert, dass Python ein' d erstellt ict', um diese Argumente zu speichern. 'dict's haben keine verlässliche Reihenfolge. Der Unterschied in der Fehlermeldung spiegelt dies wider: Mit python2.7 passiert es, dass der Hash so erstellt wird, dass "a" der erste Schlüssel ist, der über iteriert wird, während er auf python3.5 mit "b" passiert. Aber es hängt vollständig davon ab, wie das Wörterbuch aufgebaut ist usw. – Bakuriu
@Bakuriu: Ich war mir dessen bewusst, aber ich denke, dass es einige Bemühungen geben sollte, um eine konsistente und hilfreiche Fehlermeldung zu erhalten, unabhängig von der internen Implementierung. Das "echte" Problem ist die Verwendung von Schlüsselwörtern vor Positionsargumenten, und das ist der Fehler, der erkannt und gemeldet werden sollte. – cdarke