Weiterleiten von Deklarationen in Python, um Namensfehler für später definierte Funktionen zu verhindern
In Python kann der Versuch, eine Funktion aufzurufen, bevor sie definiert wurde, zur Folge haben in einem NameError. Auch wenn die Neuorganisation des Codes die einzige Lösung zu sein scheint, gibt es alternative Ansätze.
Eine Methode besteht darin, eine Funktion vorwärts zu deklarieren, indem ihr Aufruf in eine separate Funktion eingeschlossen wird. Dadurch kann die Funktion aufgerufen werden, bevor sie definiert wird, ohne dass ein NameError ausgelöst wird.
Zum Beispiel schlägt der folgende Code fehl:
print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))
Weil die cmp_configs-Funktion noch nicht definiert wurde. Um es vorwärts zu deklarieren, können wir den Aufruf umschließen:
def forward_declare_cmp_configs():
print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))
forward_declare_cmp_configs()
def cmp_configs():
...
Jetzt kann die Funktion „forward_declare_cmp_configs()“ aufgerufen werden, bevor cmp_configs() definiert wird, und der ursprüngliche Code wird ohne Fehler ausgeführt.
Ein weiteres Szenario, in dem eine Vorwärtsdeklaration nützlich ist, ist in rekursive Funktionen. Beispielsweise würde der folgende Code fehlschlagen:
def spam():
if end_condition():
return end_result()
else:
return eggs()
def eggs():
if end_condition():
return end_result()
else:
return spam()
Um die rekursiven Aufrufe vorwärts zu deklarieren, können wir einen Ansatz mit verschachtelten Funktionen verwenden:
def spam_outer():
def spam_inner():
if end_condition():
return end_result()
else:
return eggs()
def eggs():
if end_condition():
return end_result()
else:
return spam_inner()
return spam_inner()
spam_outer()()
Denken Sie daran, dass Vorwärtsdeklarationen zwar nützlich sein können, die allgemeine Regel in Python jedoch darin besteht, eine Funktion vor ihrer ersten Verwendung zu definieren.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3