Was bedeutet 'if name == "__main__"' in Python? [Duplikat]

8

Ich habe schon eine ganze Weile Skripte in Python geschrieben und studiere mehr von Python, wie ich es brauche. Wenn ich den Code anderer Leute lese, treffe ich oft if name == "__main__": construct.

Wofür ist es gut?

    
Adobe 22.11.2011, 07:05
quelle

2 Antworten

20

Damit können Sie dieselbe Datei sowohl als Bibliothek (durch Importieren) als auch als Ausgangspunkt für eine Anwendung verwenden.

Betrachten Sie zum Beispiel die folgende Datei:

%Vor%

Sie können diesen Code auf zwei Arten verwenden. Zum einen können Sie ein Programm schreiben, das es importiert. Wenn Sie die Bibliothek importieren, wird __name__ der Name der Bibliothek sein und daher wird die Überprüfung fehlschlagen und der Code wird nicht ausgeführt (was das gewünschte Verhalten ist):

%Vor%

Wenn Sie diese zweite Datei nicht schreiben möchten, können Sie Ihren Code direkt von der Befehlszeile aus mit folgendem Befehl ausführen:

%Vor%

Dieses Verhalten hängt alles von der speziellen Variablen __name__ ab, die python abhängig davon setzt, ob die Bibliothek importiert oder direkt vom Interpreter ausgeführt wird. Wenn es direkt ausgeführt wird, wird es auf __main__ gesetzt. Wenn es importiert wird, wird es auf den Bibliotheksnamen gesetzt (in diesem Fall hello ).

Oft wird dieses Konstrukt verwendet, um Komponententests zu Ihrem Code hinzuzufügen. Auf diese Weise können Sie beim Schreiben einer Bibliothek den Testcode direkt in die Datei einbetten, ohne befürchten zu müssen, dass sie ausgeführt wird, wenn die Bibliothek auf die übliche Weise verwendet wird. Wenn Sie die Bibliothek testen möchten, benötigen Sie kein Framework, da Sie die Bibliothek einfach so ausführen können, als wäre es ein Programm.

Siehe auch __main__ in der Python-Dokumentation (obwohl es bemerkenswert spärlich ist)

    
Bryan Oakley 22.11.2011, 12:11
quelle
3

Grundsätzlich

Es gibt einen Unterschied zwischen der "Haupt" -Skriptdatei und externen Dateien, die auf andere Weise importiert oder referenziert wurden. Wenn das Skript das "Haupt" -Skript ist, dann ist die spezielle Variable __name__ gleich "__main__" .

Damit können Sie den Ausführungscode vor den Klassen und Variablen des Skripts schützen. Auf diese Weise können Sie ein Skript importieren und Klassen und Variablen verwenden, ohne den Hauptcode dieses Skripts auszuführen, falls vorhanden.

    
user427390 22.11.2011 08:11
quelle

Tags und Links