Seite 1 von 1
Frage zur main() Funktion
Verfasst: Mittwoch 18. August 2021, 14:39
von Lukas_25025
Könnte mir jemand den Sinn und die Verwendung der main() Funktion erklären?
Und wie kommt dieses beim aufrufen nötige
zustande?
LG
Re: Frage zur main() Funktion
Verfasst: Mittwoch 18. August 2021, 14:44
von __deets__
Ganz einfach: außer Konstanten, Importen, Funktionen und Klassen hat nichts auf oberster Ebene zu stehen. Vor allem also kein Code, der schon gleich ausgeführt wird. Und dann oft auch die verpönten globalen Variablen anlegt. Darum nutzt man ein main. Der gezeigte main-guard ist optional, aber guter Stil, weil man damit verhindert, dass main aufgerufen wird, auch wenn man die Datei als Modul importiert.
Re: Frage zur main() Funktion
Verfasst: Mittwoch 18. August 2021, 15:01
von DasIch
Der Code den du zeigst ist falsch. Richtig wäre dies:
Um die Funktionsweise des ganzen nochmal zu erläutern: __name__ ist eine spezielle Variable mit dem Namen des aktuellen Moduls. Wenn du eine Datei hast mit Namen `foo.py` hat `__name__` innerhalb dieses Moduls den Wert `"foo"` wenn es importiert wird aber `"__main__"` wenn es direkt ausgeführt wird.
Beispiel:
Code: Alles auswählen
$ cat -p foo.py
print("__name__:", __name__)
if __name__ == "__main__":
print("main")
$ python foo.py
__name__: __main__
main
$ python
Python 3.9.1 (default, Mar 3 2021, 16:34:40)
[Clang 12.0.0 (clang-1200.0.31.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import foo
__name__: foo
Re: Frage zur main() Funktion
Verfasst: Mittwoch 18. August 2021, 15:12
von rogerb
Könnte mir jemand den Sinn und die Verwendung der main() Funktion erklären?
Das ist keine main Funktion sondern ein "import guard"
Es wird verwended um zu verhinden das code aus diesem Modul beim Import aus geführt wird.
__name__ ist eine interne Variable die entweder den Namen des Moduls enthält wenn es importiert wurde, oder "__main__" enthält wenn das entsprechende modul direkt ausgrführt wurde.
Beispiel:
Das Modul utilities.py
und das Modul program.py
Führt man utilities.py direkt aus, wird "__main__" ausgegeben.
Führt man program.py aus, wird "utilities" ausgegeben.
Das verdeutlicht, das es zu jedem modul ein __name__ gibt, welches je nachdem wie es aufgerufen wurde, unterschiedliche Werte enthalten kann.
Das mact man sich zu nutze, indem man im "import guard" Code platziert den man nur bei direktem Aufruf ausführen will:
Code: Alles auswählen
if __name__ == "__main__":
print("Ich werde nur direkt, aber nicht beim import ausgeführt")