Weiterleitungsdeklarierende Funktionen zur Verhinderung von „NameError“-Ausnahmen
Python erfordert, dass Funktionen definiert werden, bevor sie verwendet werden. Dies kann zu „NameError“-Ausnahmen führen, wenn Funktionen später im Code definiert werden, beispielsweise beim Sortieren einer Liste mit einer benutzerdefinierten „cmp“-Funktion.
Um dieses Problem zu vermeiden, ist es möglich, „forward-declare“ durchzuführen " eine Funktion, bevor sie definiert wird. Dazu gehört das Einschließen des Funktionsaufrufs in eine separate Funktion:
def sort_list():
sorted_list = sorted(mylist, cmp=cmp_configs)
print("\n".join([str(bla) for bla in sorted_list]))
def cmp_configs(...) -> int:
...
Durch die Definition von sort_list vor cmp_configs kann Python die Vorwärtsdeklaration „sehen“ und die „NameError“-Ausnahme vermeiden.
Rekursive Funktionen und Vorwärtsdeklaration
Bei rekursiven Funktionen, bei denen die Definition einer Funktion von einer anderen abhängt, kann die Vorwärtsdeklaration innerhalb derselben Funktion hilfreich sein:
def spam():
def eggs():
if end_condition():
return end_result()
else:
return spam()
if end_condition():
return end_result()
else:
return eggs()
spam()
Durch die Weiterleitung von Eiern in Spam kann Python den Funktionsnamen erkennen und den rekursiven Aufruf sicher ausführen.
Schlussfolgerung
Weiterleiten Das Deklarieren von Funktionen durch Einschließen ihrer Aufrufe in separate Funktionen oder die Verwendung innerer Funktionen innerhalb rekursiver Funktionen bietet eine Problemumgehung, um „NameError“-Ausnahmen zu verhindern, wenn Funktionen später im Code definiert werden. Es ist jedoch wichtig zu beachten, dass die Organisation des Codes und die Vermeidung von Abhängigkeitsschleifen zwischen Funktionen immer eine gute Praxis ist.
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