Python Tutorial
- jetzt Python programmieren lernen

__main__ - Hauptprogramm festlegen

Im letzten Kapitel haben wir die Möglichkeit kennen gelernt, Code aus einer anderen Datei zu importieren und somit die dort vorhandenen Funktionen nutzen zu können. Die Schreibweise der Funktionen wurde mit einem Punkt und dem Import-Name verkettet.

Was passiert aber, wenn in der importierten Datei neben den Funktionen auch direkt ausführbarer Code enthalten ist?

def bspfunktionfuerrueckgabe(eingabewert):
	rueckgabewert = eingabewert * 2
	return rueckgabewert
print("Ich stehe in der Datei:")

Dann wird immer genau an der Stelle, wo diese Datei importiert wird auch zusätzlich der im Beispiel eingebaute print-Befehl ausgeführt.

Das ist in den meisten Fällen nicht wünschenswert.

Daher gibt es den Main-Bereich. Diesen erzeugen wir, indem wir den Dateinamen mit der Systemwert __main__ vergleichen. Den Dateinamen erhalten wir über __name__

Wenn wir uns den Inhalt von __name__ ausgeben lassen, werden wir feststellen, dass bei direktem Aufruf der Dateiname enthalten ist. Bei indirektem Aufruf erhalten wir als Inhalt "__main__".

print(__name__)

Diese beide Systemkonstanten werden andere Werte enthalten, wenn die Datei importiert wird. Dann wird die eine Konstante den Dateinamen der importierten Datei enthalten und die andere den Dateinamen der Datei, in welcher der "import" steht. Einfach einmal ausprobieren.

Um jetzt überprüfen zu können, ob eine Datei direkt ausgeführt wird, werden beide Systemkontanten in eine if-Bedingung gepackt. So wissen wir, ob die Datei direkt aufgerufen wird und somit der Code ausgeführt werden soll oder diese importiert wurde uns somit nur die Funktionen zur Verfügung stehen sollen.

def bspfunktionfuerrueckgabe(eingabewert):
	rueckgabewert = eingabewert * 2
	return rueckgabewert
if __name__ == "__main__":
	print("Datei wurde direkt aufgerufen und die Main wird ausgeführt")
else:
	print("Datei wurde als Modul aufgerufen")
print("Ich stehe in der Datei: " + __name__)
Nutzen wir nun diesen Programm als Modul und rufen dieses über eine andere Datei auf (siehe letzte Kapitel)m erhalten wir die entsprechende Ausgabe:
import fktsammlung
fktsammlung.bspfunktionfuerrueckgabe(3)