wenn __name__ == '__main__' python
Ich habe so viele Artikel über dieses
if __name__ == '__main__'
aber habe es nicht erhalten. ich werde teilen Sie den code bitte erklären Sie es eher kurz..
Habe ich erstellt eine Datei "ab.py"
def a():
print('A function in ab file');
a()
die zweite Datei ist "xy.py"
import ab
def b():
print('b function')
def x(): print ('s');
x()
if __name__ == "__main__" :b()
Wenn ich diesen code ausführen, dann wird dieser Ausgang kommt
A function in ab file
s
b function
Ich will jetzt wissen, was das bedeutet, Was ist eigentlich mit diesem code, Warum wir diese umsetzen? Unser code arbeiten, ohne es auch
if __name__ == "__main__" :b()
- mögliche Duplikate stackoverflow.com/questions/419163/what-does-if-name-main-do
- Ich habe es von hier 🙁 ich habe schon gelesen das dies
- es ist wie die
main(String[] args)
in Java oder C# - Mögliche Duplikate von Was bedeutet, wenn __name__ == "__main__": tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
, Sollten Sie in die Gewohnheit, mit diesem fast immer.
Alles, was danach kommt
if __name__ == '__main__':
wird ausgeführt, wenn Sie ausdrücklich führen Sie Ihre Datei.Jedoch, wenn Sie importieren
myfile.py
anderswo:Nichts unter
if __name__ == '__main__':
aufgerufen werden.Beim ausführen xy.py importieren Sie ab. Die import-Anweisung läuft das Modul importieren, so ab die Operationen, die ausgeführt werden, bevor der Rest von xy ist. Einmal fertig mit ab, es geht weiter mit xy.
Der Dolmetscher merkt sich auch, welche Skripte ausgeführt werden, die mit
__name__
. Wenn Sie ein Skript ausführen, egal was Sie haben es genannt - der interpreter ruft es"__main__"
. Das ist, wie es verfolgt, welches Skript ist die master-Datei, die script, das zurückgegeben wird, um nach einen externen Anruf an ein anderes script. (Die 'home' - Skript, könnte man sagen.) Jedem anderen script, die aufgerufen wird, von dieser 'Haupt' - Skript zugeordnet ist, seinen Namen wie seine__name__
. Also, die Linieif __name__ == "__main__" :
ist der interpreter testen, um zu bestimmen, wenn es läuft auf das Skript schaut es an (parsing), oder wenn es vorübergehend spähen in einem anderen Skript. Dies gibt dem Programmierer die Flexibilität zu haben, das Skript anders Verhalten, wenn es extern aufgerufen.Zu verstehen, was passiert, konzentrieren Sie sich zunächst auf die unindented Linien und die Reihenfolge in der die Skripte. Denken Sie daran, dass die Funktion - oder
def
- Blöcke, die nichts tun von sich selbst, bis Sie genannt werden. Was der interpreter könnte denken, wenn murmelte zu sich selbst:__name__
ab.py.'__main__'
!if
- Anweisung. Naja, die Bedingung erfüllt wurde (die variable__name__
festgelegt wurde'__main__'
), also ich 'll drucken" b-Funktion".Aber ich glaube nicht, dass Sie verwenden es richtig. Es gibt wahrscheinlich Ausnahmen, aber die beiden unteren Zeilen sein sollte:
... was bedeutet, "Wenn dies ist 'Haupt' - oder home-Skript, ausführen der Funktion, die aufgerufen wird
main()
. Das ist, warum Sie werden sehen, eindef main():
block an der Spitze enthält, die den Hauptstrom der das Skript-Funktionalität.(Wow, dass ich tatsächlich dachte, dieses Teil aus dem beim schreiben die oben. Dies ist der Teil ich wirklich gekämpft, um zu verstehen, auch, weil ich habe noch nie selbst ein Skript geschrieben, mit Funktionen, die ich genannt habe, aus anderen Schriften.)
Erinnern, was ich früher gesagt habe über die import-Anweisungen? Wenn Sie ein Modul importieren, die Sie nicht nur "erkennen" und warten Sie auf weitere Anweisungen. Eigentlich läuft alle ausführbaren Operationen, die in den Skript. Also, setzen Sie das Fleisch von Ihrem Skript in die
main()
Funktion effektiv isoliert es, indem es in die isolation, so dass Sie nicht sofort ausgeführt werden, die beim Import von einem anderen script.Wieder gibt es Ausnahmen, aber gängige Praxis ist, dass
main()
in der Regel nicht bekommen extern aufgerufen. So können Sie sich Fragen, noch eine Sache: wenn wir den Aufruf nichtmain()
ist, warum sind wir den Aufruf der script überhaupt? Es ist, weil viele Menschen strukturieren Ihre Skripte mit eigenständigen Funktionen, die sind so gebaut, laufen von selbst. Sie sind dann später als irgendwo sonst in den Körper des Skripts. Das bringt mich zu diesem:Ja, du hast Recht. Diese separaten Funktionen kann aufgerufen werden, die von einer in-line-Skript, das ist nicht enthalten innerhalb einer
main()
Funktion. Wenn Sie daran gewöhnt sind (wie ich bin, in meinen frühen Lernens, Stufen der Planung) zum Aufbau der in-line-Skripts, die genau das tun, was Sie brauchen, und Sie werden versuchen, es herauszufinden wieder, wenn Sie jemals brauchen, dass die operation erneut - nun, Sie sind nicht verwendet, um diese Art der internen Struktur, um Ihren code, denn es ist mehr kompliziert zu bauen, und es ist nicht so intuitiv zu Lesen. Aber das ist ein Skript, das wohl nicht haben können seine Funktionen, die extern aufgerufen werden, denn wenn es gemacht würde, starten die Berechnung und Zuweisung von Variablen. Und die Chancen sind, wenn Sie versuchen zu re-verwenden Sie eine Funktion, Ihr neues Skript ist eng genug, um die alten, dass es da widersprüchliche Variablen.Soll ich sagen nebenbei, dieser thread enthält eine Antwort von @kindall, die schließlich hat mir geholfen, zu verstehen, - das Warum, nicht das Wie. Leider es ' s wurde als Duplikat gekennzeichnet von diese eine, die ich denke, ist ein Fehler. (Ich bin neu auf diesem board, also kann nicht Flagge es noch; wenn Sie mit mir einverstanden sind, bitte Kennzeichnen Sie die für weitere Aufmerksamkeit mod.)
Ein ganz einfaches Beispiel, um diese Aussage verstehen, ist die folgende:
Davon ausgehen, dass wir die folgende python-Skript mit dem Namen: 'using_name.py' :
Jetzt, versuchen Sie, die folgenden 2 Dinge und sehen, was passiert:
1) Führen Sie direkt das Skript
Ergebnis
2) Importieren Sie das Skript
Ergebnis
In einfachen Worten alles, was sich in
if __name__ == "__main__":
wird nur ausgeführt, wenn das Modul ausgeführt werden soll, direkt von python-interpreter (ex: python module.py) ODER, wenn Funktionen aufgerufen werden, die explizit nach dem Import.BEISPIEL:
testFile.py
app.py
python testFile.py
Ausgabe:
Ich werde immer laufen in jeder situation. Auch wenn dieses Modul wird " nur " importiert
Ich wird nur ausgeführt, wenn dieses Modul (testFile.py) ausgeführt wird, direkt von python-interpreter
python app.py
Ausgabe:
Ich werde immer laufen in jeder situation. Auch wenn dieses Modul wird " nur " importiert
wenn Sie möchten, erfahren Sie mehr über die Interna von
__name__
variable:Überprüfen Sie diese Was bedeutet, wenn __name__ == "__main__": tun?