Enthüllung des Syntaxfehlers bei der Reihenfolge von Funktionsargumenten
Warum stößt der folgende Python-Code auf einen SyntaxError?
def fun1(a="who is you", b="True", x, y): print a,b,x,y
Der Grund für den Fehler liegt darin, dass nicht standardmäßige Argumente (x und y) in der Funktionssignatur vor Standardargumenten (a und b) stehen müssen. Erforderliche Parameter müssen vor optionalen Parametern mit Standardwerten stehen.
Die Gefahr gemischter Modi
Das Erlauben, dass nicht standardmäßige Argumente auf Standardargumente folgen, würde zu Mehrdeutigkeiten für den Interpreter führen Bestimmen, welche Werte welchen Argumenten entsprechen. Stellen Sie sich das folgende Szenario vor:
def fun1(a, b, x="who is you", y="True"): ...
Angenommen, wir rufen diese Funktion mit den folgenden Argumenten auf:
fun1(1, "ok") # 1 assigned to x, "ok" assigned to a or b?
Ohne die Ordnungsregel wäre es unmöglich, Argumenten eindeutig Werte zuzuweisen.
Korrekte Syntax für Funktionsargumente
Um Funktionen korrekt zu definieren, Standardargumente müssen immer auf Nicht-Standardargumente folgen. Die korrekte Syntax für die Beispielfunktion lautet:
def fun1(x, y, a="who is you", b="True"): ...
Diese Syntax stellt sicher, dass der Interpreter Argumenten deterministisch Werte zuweisen kann, selbst wenn Schlüsselwortargumente vorhanden sind und Argumente fehlen.
Rettung von Schlüsselwortargumenten
Mit Schlüsselwortargumenten können Sie Standardwerte überschreiben, indem Sie den Argumentnamen explizit angeben. Dies ist besonders nützlich, um fehlende Argumente zu überspringen. Betrachten Sie beispielsweise den folgenden Aufruf von fun1:
fun1(x=1, b="False") # Override default value of b
Fazit
Die Beschränkung auf Nicht-Standardargumente im Anschluss an Standardargumente gewährleistet eine klare und eindeutige Interpretation von Funktionsaufrufen , um Syntaxfehler und Laufzeitfehler aufgrund falscher Argumentzuweisung zu verhindern.
Das obige ist der detaillierte Inhalt vonWarum müssen Nicht-Standardargumente in Python-Funktionsdefinitionen vor Standardargumenten stehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!