Alle anderen haben schon geantwortet, aber ich glaube, ich habe noch etwas hinzuzufügen.
Gründe, die dafür sprechen if
Anweisungsaufruf main()
(in keiner bestimmten Reihenfolge):
-
Andere Sprachen (wie C und Java) haben eine main()
Funktion, die bei der Ausführung des Programms aufgerufen wird. Mit dieser if
können wir Python dazu bringen, sich wie diese zu verhalten, was sich für viele Menschen vertrauter anfühlt.
-
Der Code wird Reiniger , leichter zu lesen und besser organisiert. (ja, ich weiß, das ist subjektiv)
-
Es wird möglich sein import
den Python-Code als Modul ohne unangenehme Nebeneffekte.
-
Dies bedeutet, dass es möglich sein wird, Tests gegen diesen Code durchzuführen.
-
Das bedeutet, dass wir diesen Code in eine interaktive Python-Shell importieren und ihn testen/debuggen/ausführen können.
-
Variablen im Inneren def main
son . während diejenigen, die nicht dazu gehören weltweit . Dies kann zu einigen Fehlern und unerwarteten Verhaltensweisen führen.
Aber, Sie sind nicht erforderlich zu schreiben. main()
Funktion und rufen sie innerhalb einer if
Erklärung.
Ich selbst schreibe in der Regel kleine Wegwerf-Skripte ohne jegliche Funktion. Wenn das Skript groß genug wird oder wenn ich das Gefühl habe, dass es für mich von Vorteil ist, den ganzen Code in eine Funktion zu packen, dann überarbeite ich den Code und tue es. Das passiert auch, wenn ich schreibe bash
Skripte.
Auch wenn Sie den Code in die Hauptfunktion einfügen, müssen Sie ihn nicht genau so schreiben. Eine saubere Variante könnte sein:
import sys
def main(argv):
# My code here
pass
if __name__ == "__main__":
main(sys.argv)
Dies bedeutet, dass Sie Folgendes aufrufen können main()
von anderen Skripten (oder der interaktiven Shell), die benutzerdefinierte Parameter übergeben. Dies könnte in Unit-Tests oder bei der Stapelverarbeitung nützlich sein. Denken Sie aber daran, dass der obige Code das Parsen von argv erfordert, daher wäre es vielleicht besser, einen anderen Aufruf zu verwenden, der bereits geparste Parameter übergibt.
In einer objektorientierten Anwendung, die ich geschrieben habe, sah der Code wie folgt aus:
class MyApplication(something):
# My code here
if __name__ == "__main__":
app = MyApplication()
app.run()
Sie können also den Code schreiben, der Ihnen besser gefällt :)
3 Stimmen
Siehe stackoverflow.com/questions/419163/what-does-if-name-main-do
32 Stimmen
Stackoverflow.com/questions/419163/what-does-if-name-main-do beantwortet nicht die ganze Frage.
13 Stimmen
Was das vermeintliche Duplikat nicht beantwortet: eine main()-Funktion zu haben (anstatt einfach den gesamten Code in die "if nombre "Block) ist nützlich, weil er verhindert, dass versehentlich globale Variablen erstellt werden, die andere Funktionen beeinflussen könnten.
1 Stimmen
Neben den anderen Antworten ermöglicht ein Einstiegspunkt für die Ausführung Ihres Codes die Verwendung von Einstiegspunkten in Ihrer setup.py, um automatisch ausführbare Skripte zu erzeugen, die die Import- und Ausführungsschritte umschließen. Das ist nett, wenn Sie wollen, dass Ihr Benutzer in der Lage ist, zu schreiben
setup-my-app ...
stattpython2.7 /opaque/path/to/module.py ...
0 Stimmen
Der Nachteil dabei ist, dass mein Code jetzt tonnenweise "globale" Deklarationen hat, die am Anfang von "def main()" für jede KONSTANTE stehen, die von main() gesetzt wird. Das sieht (zumindest für mich) unprofessionell aus.