7951 Stimmen

Was passiert, wenn __name__ == "__main__":?

Was bewirkt dies?

if __name__ == "__main__":
    print("Hello world!")

34 Stimmen

Nur fürs Protokoll - was ist " Haupt ": docs.python.org/3/reference/ und was ist " Name ": docs.python.org/3/reference/

9voto

hooman Punkte 476

Jedes Modul in Python hat ein spezielles Attribut namens __name__ . Der Wert der __name__ Attribut wird gesetzt auf '__main__' wenn das Modul als Hauptprogramm ausgeführt wird (z. B. bei der Ausführung von python foo.py ).

Andernfalls wird der Wert von __name__ wird auf den Namen des Moduls gesetzt, aus dem es aufgerufen wurde.

1 Stimmen

Re "...der Name des Moduls, aus dem es aufgerufen wurde" : Nicht das Modul selbst? Das klingt nicht plausibel. Wenn es ist den Fall, können Sie aufwendig in Ihrer Antwort? (Aber ohne "Bearbeiten:", "Aktualisieren:" oder ähnlich - die Antwort sollte so aussehen, als wäre sie heute geschrieben worden).

8voto

DARK_C0D3R Punkte 1709

Erstellen Sie eine Datei, a.py :

print(__name__) # It will print out __main__

__name__ ist immer gleich __main__ wenn diese Datei direkt laufen zeigt, dass dies die Hauptdatei ist.

Erstellen Sie eine weitere Datei, b.py in demselben Verzeichnis:

import a  # Prints a

Starten Sie es. Es wird gedruckt a d.h. der Name der Datei, die importiert wird .

Also, um zu zeigen zwei verschiedene Verhaltensweisen der gleichen Datei Dies ist ein weit verbreiteter Trick:

# Code to be run when imported into another python file

if __name__ == '__main__':
    # Code to be run only when run directly

6voto

Igor Micev Punkte 1206

Sie können sich über die spezielle Variable __name__ mit diesem einfachen Beispiel:

erstellen. datei1.py

if __name__ == "__main__":
    print("file1 is being run directly")
else:
    print("file1 is being imported")

Erstellen Sie *file2. py

import file1 as f1

print("__name__ from file1: {}".format(f1.__name__))
print("__name__ from file2: {}".format(__name__))

if __name__ == "__main__":
    print("file2 is being run directly")
else:
    print("file2 is being imported")

Ausführen von file2.py

Ausgabe :

file1 is being imported
__name__ from file1: file1
__name__ from file2: __main__
file2 is being run directly

6voto

PrabhavDevo Punkte 979

Wenn eine Python-Datei ausgeführt wird, erzeugt sie viele spezielle Variablen wie __name__ . Die Variable __name__ enthält den Namen der Datei. Und die Antwort auf Ihre Frage lautet

if __name__ == "__main__":
       # Do something

Das bedeutet, dass, wenn der Name der auszuführenden Datei als Quelldatei ausgeführt wird und kein Modul dann wird der darin enthaltene Code ausgeführt. Dies kann mit einem einfachen Beispiel bewiesen werden. Erstellen Sie zwei Python-Dateien, foo.py et second.py . Dann im foo.py geben Sie dies ein:

if __name__ == "__main__":
       print("file is not imported")
else:
       print("file is imported")

Und in der second.py geben Sie dies ein:

import foo

if foo.__name__ == "__main__":
       print("file is not imported")
else:
       print("file is imported")

Wenn Sie darüber hinaus Folgendes tun werden print(__name__) dann wird folgendes gedruckt __main__ . Warum?

Da die Datei als Haupt Quelle und wenn Sie es tun print(foo.__name__) es wird gedruckt foo weil der Standardwert der __name__ ist der Name der Datei, und mit Standard meine ich, dass Sie ihn auch ändern können. Um dies zu tun, gehen Sie einfach in die foo.py Datei und tun Sie dies: __name__ = "name" . Wenn Sie die Datei dann ausführen, zum Beispiel,

__name__ = "Hello, World!"
print(__name__)

dann wird die Ausgabe sein:

Hello, World!

4voto

mamal Punkte 1211

Le site Python-Hauptfunktion ist der Startpunkt eines jeden Programms. Wenn das Programm gestartet wird, führt der Python-Interpreter den Code nacheinander aus. Die Hauptfunktion wird nur ausgeführt, wenn sie als Python-Programm ausgeführt wird...

def main():
    print("I am in the function")

print("I am out of the function")

wenn Sie das Skript ausführen, zeigt:

I am out of the function

Und nicht den Code "Ich bin in der Funktion".

Es liegt daran, dass wir die Aufruffunktion "if__name__== " nicht deklariert haben. Haupt ".

Wenn Sie davon Gebrauch machen:

def main():
    print("I am in the function")

if __name__ == "__main__":
    main()

print("I am out of the function")

Die Ausgabe ist gleich

I am in the function
I am out of the function

In Python bedeutet "if__name__== " Haupt Mit "Python" können Sie die Python-Dateien entweder als wiederverwendbare Module oder als eigenständige Programme ausführen.

Wenn der Python-Interpreter eine Quelldatei liest, führt er den gesamten darin enthaltenen Code aus. Wenn Python die "Quelldatei" als Hauptprogramm ausführt, setzt es die spezielle Variable ( Name ) einen Wert zu haben (" Haupt ").

Wenn Sie die Hauptfunktion ausführen, wird sie die "if"-Anweisung lesen und prüfen, ob Name ist gleich Haupt .

In Python "if__name__== " Haupt Mit "Python" können Sie die Python-Dateien entweder als wiederverwendbare Module oder als eigenständige Programme ausführen.

1 Stimmen

Ich kann mir nicht helfen, aber ich denke, das ist eher verwirrend als hilfreich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X