Was ist der Umfang von if __name__ == __main__
? Ist alles von dieser Aussage im globalen Raum abgedeckt?
4 Antworten
Der if __name__ == '__main__'
Block hat überhaupt nichts Besonderes. Das heißt, sein Umfang wird durch den Ort bestimmt, an dem er auftritt. Da solche Blöcke normalerweise auf oberster Ebene auftreten, ist ihr Umfang global.
Wenn dieser Block in einer Funktion auftreten würde, die vollkommen legal ist, wäre sein Gültigkeitsbereich lokal - mit der Ausnahme, dass __name__
immer noch in den im Modul definierten globalen Wert aufgelöst wird.
Es ist im globalen Geltungsbereich, solange:
- es wird im globalen Bereich aufgerufen, d. h. nicht innerhalb einer Funktion
- Es befindet sich in der Codedatei, die ausgeführt wird.
Zur Veranschaulichung von (2) :
Angenommen, Ihr Code befindet sich in foo.py
und in bar.py
haben Sie die Anweisung from foo import *
. In diesem Fall wird der Block if __name__ == "__main__":
in foo.py
nicht ausgeführt. Dieser Block wird nur ausgeführt, wenn foo.py
ausgeführt wird
>>> if __name__ == '__main__':
... x = 1
... print 'x' in globals()
True
Bearbeiten : user4815162342 weist darauf hin, dass diese if-Anweisung in jedem Bereich geschrieben werden kann. Es wird am häufigsten im globalen Bereich geschrieben.
Hier ist es in einer Funktion:
>>> def foo():
... if __name__ == '__main__':
... bar = 1
... foo()
... print 'bar' in globals()
False
Python hat keinen blocklokalen Bereich, daher werden alle Variablen, die Sie in einem if
-Block verwenden, dem nächstgelegenen "echten" Bereich hinzugefügt. (Bei einem if..main
Block handelt es sich normalerweise um Attribute des Moduls.)
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.