Einführung
In Python ist __main__ der Name des Gültigkeitsbereichs (Scope), in dem Code auf oberster Ebene ausgeführt wird. Wenn eine Python-Datei direkt über die Kommandozeile ausgeführt wird, wird ihre spezielle eingebaute Variable __name__ auf den String "__main__" gesetzt. Wird die Datei jedoch als Modul in ein anderes Skript importiert, wird ihr __name__ auf ihren eigenen Dateinamen gesetzt.
Dieses Verhalten ermöglicht ein gängiges und mächtiges Idiom: einen Codeblock nur dann bedingt auszuführen, wenn die Datei als Hauptprogramm ausgeführt wird. Dies wird mit der Anweisung if __name__ == "__main__": erreicht.
In diesem Lab lernen Sie, wie Sie diesen bedingten Block verwenden können, um Ihre Python-Dateien vielseitiger zu gestalten, sodass sie sowohl als eigenständige Skripte als auch als wiederverwendbare Module fungieren können.
Den Haupt-Gültigkeitsbereich verstehen
In diesem Schritt erfahren Sie, was der __main__-Scope ist, und sehen, wie sich die __name__-Variable eines Moduls ändert, je nachdem, wie es ausgeführt wird.
Erstellen wir zunächst ein einfaches Python-Modul und untersuchen wir seine __name__-Variable.
Hinweis: Wenn Sie mit der Verwendung von WebIDE (ähnlich VS Code) nicht vertraut sind, lernen Sie dies bitte zuerst in diesem Lab.
- Öffnen Sie die Datei
my_module.pyim Dateiexplorer auf der linken Seite. - Fügen Sie den folgenden Code zu
my_module.pyhinzu. Dieser Code definiert eine Funktion und gibt dann den Wert der__name__-Variable aus.
## my_module.py
def greet(name):
print(f"Hello, {name}!")
print(f"The __name__ of my_module.py is: {__name__}")
## This block checks if the script is being run directly
if __name__ == "__main__":
print("my_module.py is being run directly.")
greet("World")
Führen wir diese Datei nun direkt als Skript aus. Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus:
python3 my_module.py
Sie sehen die folgende Ausgabe. Beachten Sie, dass __name__ gleich "__main__" ist, sodass der Code innerhalb des if-Blocks ausgeführt wird.
The __name__ of my_module.py is: __main__
my_module.py is being run directly.
Hello, World!
Als Nächstes sehen wir, was passiert, wenn wir my_module.py in ein anderes Skript importieren.
- Öffnen Sie die Datei
main.py. - Fügen Sie den folgenden Code hinzu, der
my_moduleimportiert und dessengreet-Funktion aufruft.
## main.py
import my_module
print("Running main.py")
my_module.greet("LabEx")
Führen Sie nun main.py im Terminal aus:
python3 main.py
Beobachten Sie die Ausgabe genau:
The __name__ of my_module.py is: my_module
Running main.py
Hello, LabEx!
Wenn main.py my_module.py importiert, führt der Python-Interpreter den Code in my_module.py aus. Dieses Mal wird seine __name__-Variable auf "my_module" (den Namen der Moduldatei) gesetzt. Da __name__ nicht "__main__" ist, wird der Code innerhalb des Blocks if __name__ == "__main__": nicht ausgeführt. Dies demonstriert, wie Sie Code, der für die direkte Ausführung bestimmt ist, von den wiederverwendbaren Teilen Ihres Moduls trennen können.
Vorteile der Hauptprüfung (Main Check)
In diesem Schritt untersuchen Sie die wichtigsten Vorteile der Verwendung der if __name__ == "__main__":-Prüfung. Diese einfache bedingte Anweisung ist grundlegend für das Schreiben von modularem und wiederverwendbarem Python-Code.
Die Hauptvorteile sind:
- Doppelte Funktionalität: Sie ermöglicht es einer Python-Datei, sowohl als wiederverwendbares Modul, das importiert werden kann, als auch als eigenständiges Programm, das direkt ausgeführt werden kann, zu fungieren.
- Code-Kapselung: Sie stellt sicher, dass Testcode, Einstiegspunkte für die Befehlszeile oder Beispielverwendungsausschnitte nur ausgeführt werden, wenn die Datei direkt ausgeführt wird, nicht aber, wenn sie von einem anderen Modul importiert wird. Dies verhindert unerwartete Nebeneffekte.
- Modularität und Wiederverwendbarkeit: Durch die Trennung der Logik auf Skriptebene von den Kernfunktionen machen Sie Ihre Funktionen wiederverwendbarer und Ihren Code einfacher zu testen und zu warten.
Veranschaulichen wir dies anhand eines praktischen Beispiels. Stellen Sie sich vor, Sie erstellen ein Dienstprogramm-Modul mit einer einfachen Funktion.
- Öffnen Sie die Datei
calculator.pyim Dateiexplorer auf der linken Seite. - Fügen Sie den folgenden Code zu
calculator.pyhinzu. Die Funktionaddist wiederverwendbar, während der Code innerhalb desif-Blocks als einfacher Test oder Demonstration dient.
## calculator.py
def add(a, b):
"""Diese Funktion addiert zwei Zahlen."""
return a + b
## Dieser Block wird nur ausgeführt, wenn calculator.py direkt ausgeführt wird.
## Dies ist ein guter Ort für Tests oder eine einfache Befehlszeilenschnittstelle.
if __name__ == "__main__":
print("Running calculator.py as a standalone script for testing.")
result = add(3, 5)
print(f"A test run of add(3, 5) results in: {result}")
Führen Sie diese Datei direkt aus, um den Testcode in Aktion zu sehen:
python3 calculator.py
Die Ausgabe zeigt, dass der Testblock ausgeführt wurde:
Running calculator.py as a standalone script for testing.
A test run of add(3, 5) results in: 8
Nun wollen wir die Funktion add in unserer Hauptanwendung wiederverwenden.
- Ändern Sie
main.py, um die Funktionaddauscalculator.pyzu importieren und zu verwenden.
## main.py
from calculator import add
print("Using the 'add' function from the calculator module.")
sum_result = add(10, 20)
print(f"The result of add(10, 20) is: {sum_result}")
- Führen Sie
main.pyim Terminal aus:
python3 main.py
Sie erhalten die folgende Ausgabe:
Using the 'add' function from the calculator module.
The result of add(10, 20) is: 30
Wie Sie sehen können, wurde der Testcode aus calculator.py nicht ausgeführt. Wir haben die Funktion add erfolgreich importiert und verwendet, ohne die skriptspezifische Logik auszuführen, was die Stärke der if __name__ == "__main__":-Prüfung zur Erstellung sauberer, wiederverwendbarer Module demonstriert.
Zusammenfassung
In diesem Lab haben Sie den __main__-Gültigkeitsbereich (Scope) in Python und die Bedeutung des bedingten Blocks if __name__ == "__main__": kennengelernt.
Sie haben gesehen, dass:
- Die
__name__-Variable eines Python-Moduls auf"__main__"gesetzt wird, wenn die Datei direkt ausgeführt wird. - Wenn das Modul importiert wird, wird sein
__name__auf den Dateinamen des Moduls gesetzt. - Die Prüfung
if __name__ == "__main__":ermöglicht es Ihnen, Code zu schreiben, der nur ausgeführt wird, wenn die Datei als eigenständiges Skript ausgeführt wird.
Dieses mächtige Merkmal ist der Schlüssel zum Schreiben von modularem und wiederverwendbarem Python-Code und ermöglicht es Ihren Dateien, sowohl als ausführbare Programme als auch als importierbare Bibliotheken zu dienen. Durch die Trennung der skriptspezifischen Logik von der Kernfunktionalität können Sie sauberere, wartbarere und professionellere Python-Anwendungen erstellen.



