Unverständlich:Die Main-Funktion

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JEC
User
Beiträge: 7
Registriert: Freitag 26. Juli 2019, 21:12

Hallöchen,
ich habe heute mich mit Funktionen beschäftigt und stieß dabei auf die sog. Main-Funktion. So bekam ich zwei Stücke Code an die Hand die ich irgendwie
nicht nachvollziehen kann:

Code: Alles auswählen

if __name__ == "__main__":
    foo()
und

Code: Alles auswählen

def main(argv):
    blablabla
if __name__ == "__main__":
    main(sys.argv[1:])
Ist jemand evtl. in der Laage mir das Plausibel zu erklären?

Liebe Grüße und
danke im voraus

JCE
Benutzeravatar
snafu
User
Beiträge: 6866
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

__name__ ist der Name des Moduls, wenn es importiert wurde. Wenn es hingegen als Skript von der Kommandozeile aufgerufen wird, dann ist der Name einfach "__main__", d.h. der Vergleich ist in diesem Fall wahr. Und dann ruft man in den meisten Fällen so wie bei deinen Beispielen die main()-Funktion auf.

Und die Bemerkung, dass es dazu mindestens 56452457465 Google-Treffer gibt, spar ich mir mal...
Zuletzt geändert von snafu am Samstag 27. Juli 2019, 21:26, insgesamt 1-mal geändert.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Was genau ist denn deine Frage?

Aus verschiedenen Gründen (und icht nur weil es guter Stil ist) sollten in Python nur die Definitionen von Klassen, Funkltionen und Konstanten auf Modulebene stehen. Per Kovention startet das Programm mit einer Funktion "main".

Wenn das aktuelle Modul das erste Modul ist, das von dem Interpreter gestartet wurde, ist der Wert von __name__ "__main__". Das macht man sich mit dem von dir gezeigten Pattern zunutze um dann, und nur dann, die Startfunktion main aufzurufen.
JEC
User
Beiträge: 7
Registriert: Freitag 26. Juli 2019, 21:12

@snafu
@sparrow
Ich danke euch beiden für die schnellen und verständlichen Antworten. Ich verstehe jetzt die Funktion und Funktionsweise dieser Code-Zeilen.

LG
JEC
Antworten