Ist es möglich, eine Funktion aufzurufen, ohne sie zuvor vollständig definiert zu haben? Beim Versuch erhalte ich die Fehlermeldung: " Funktionsname ist nicht definiert". Ich komme aus einem C ++ - Hintergrund, daher macht mich dieses Problem fertig.
Deklarieren der Funktion vor dem Arbeiten:
def Kerma():
return "energy / mass"
print Kerma()
Der Versuch, die Funktion aufzurufen, ohne sie zuvor zu definieren, führt jedoch zu folgenden Problemen:
print Kerma()
def Kerma():
return "energy / mass"
In C ++ können Sie eine Funktion nach dem Aufruf deklarieren, sobald Sie den Header davor platziert haben.
Vermisse ich hier etwas?
python
function
formatting
TheGentleOne
quelle
quelle
Kerma is an acronym for "kinetic energy released per unit mass"
.py
Datei zu stellen und diese zu importieren? Gibt es einige unbeabsichtigte Konsequenzen?Antworten:
Eine Art und Weise, die in Python irgendwie idiomatisch ist, ist das Schreiben:
Dies ermöglicht Ihnen , Sie Code in der gewünschten Reihenfolge so lange wie zu schreiben , wie Sie die Funktion halten Aufruf
main
am Ende.quelle
main
Funktionen normalerweise am Ende stehen.if __name__ == '__main__':
Wechsel der gemeinsame idiomatische Teil ist.if ... __main__':
. Ich habe nicht gesagt, dass dasmain
über dem Rest des Codes platziert werden sollte. Ich sagte, der wichtige Teil ruft_\_main__
am Ende an, und es spielt keine Rolle, wo Sie dann seine Definition platzieren.Wenn ein Python-Modul (.py-Datei) ausgeführt wird, werden die darin enthaltenen Anweisungen der obersten Ebene in der Reihenfolge ausgeführt, in der sie angezeigt werden, von oben nach unten (von Anfang bis Ende). Dies bedeutet, dass Sie auf etwas erst verweisen können, wenn Sie es definiert haben. Zum Beispiel wird der folgende Fehler generiert:
Im Gegensatz zu vielen anderen Sprachen
def
undclass
Anweisungen ausführbar sind in Python-nicht nur deklarative-so dass Sie nicht verweisen können entwedera
oderb
bis das passiert , und sie sind definiert. Aus diesem Grund hat Ihr erstes Beispiel Probleme: Sie verweisen auf dieKerma()
Funktion, bevor ihredef
Anweisung ausgeführt und der Text verarbeitet wurde und das resultierende Funktionsobjekt an den Namen der Funktion gebunden ist, sodass es zu diesem Zeitpunkt im Skript nicht definiert ist.Programme in Sprachen wie C ++ werden normalerweise vor der Ausführung vorverarbeitet. Während dieser Kompilierungsphase werden das gesamte Programm und alle
#include
Dateien, auf die es verweist, gleichzeitig gelesen und verarbeitet. Im Gegensatz zu Python verfügt diese Sprache über deklarative Anweisungen, mit denen der Name und die aufrufende Funktionsfolge (oder der statische Variablentyp) vor der Verwendung deklariert (aber nicht definiert) werden können, sodass der Compiler, wenn er auf seinen Namen stößt, über genügend Informationen verfügt, um deren Namen zu überprüfen Verwendung, die in erster Linie Typprüfungen und Typkonvertierungen umfasst, für die noch keine Definition des tatsächlichen Inhalts oder der Codekörper erforderlich ist.quelle
doit(); sub doit { print("I'm doing it!\n"); }
Dies ist in Python nicht möglich, aber ehrlich gesagt werden Sie bald feststellen, dass Sie es überhaupt nicht brauchen. Die pythonische Methode zum Schreiben von Code besteht darin, Ihr Programm in Module zu unterteilen, die Klassen und Funktionen definieren, und in ein einziges "Hauptmodul", das alle anderen importiert und ausgeführt wird.
Für einfache Wegwerf-Skripte gewöhnen Sie sich daran, den "ausführbaren Teil" am Ende zu platzieren, oder lernen Sie noch besser, eine interaktive Python-Shell zu verwenden.
quelle
Python ist eine dynamische Sprache und der Interpreter nimmt immer den Status der Variablen (Funktionen, ...) an, wie sie sich zum Zeitpunkt des Aufrufs befinden. Sie können die Funktionen in einigen if-Blöcken sogar neu definieren und jedes Mal anders aufrufen. Deshalb müssen Sie sie definieren, bevor Sie sie aufrufen.
quelle