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/

2voto

Warrior199 Punkte 101

Angenommen, ich habe Funktionen und Klassen für Web Scraping auf Wikipedia geschrieben. Natürlich ist das vielleicht kein gutes Beispiel.

Ich möchte diese Funktionen in einem anderen Programm verwenden, ohne es neu zu schreiben.

Nun, ich importiere sie, aber am Ende der Datei füge ich __name__ == '__main__'

Wenn wir import ein Modul, so wird der gesamte darin enthaltene Code von Anfang bis Ende ausgeführt. Aber wenn er die Bedingung erreicht, wird er nicht ausgeführt func , func2 usw., das ist die Wikipedia __scrape__ .

Nun, im globalen Bereich kann ein Python __name__ ist definiert als '__main__' für das aktuelle Programm.

Wenn wir import ein Modul, wird es als Variable im Namensraum unseres aktuellen Programms definiert und aktuelles Programm __name__ est '__main__' :

Datei test.py

def func():
    # Do something
    pass

def func2():
    # Do something
    pass

print('The program name is set to ', globals()['__name__'])

if __name__=='__main__':
    # In the current program, __name__ is equal to '__main__'
    func('https://www.wikipedia.org')
    func2('https://www.wikipedia.org')
    # Or do more jobs

import test1
print('inside of current program')
print('name is current program', __name__)
print(globals()['test1'])
test1.func('another site')
test1.func2('another site')

Ausgabe

inside of test 1
name of program is set to test1
end of module
inside of current
__main__
<module 'test1' from 'C:\\users\\ir\\appdata\\local\\programs\\python\\python38\\lib\\test1.py'>

0 Stimmen

Die aufgelistete Ausgabe ist im Vergleich zum aufgelisteten Code sehr unsynchronisiert. Können Sie nicht kopieren-einfügen es in anstatt Tippfehler zu machen?

1 Stimmen

Sie brauchen keine Erlaubnis, um hier zu schreiben, sondern um Ihrer selbst willen und um Ihrer Leser willen, bitte schreiben Sie Sätze groß und lassen Sie keine Satzzeichen weg. Dies erfordert keine besonderen Fähigkeiten nur die Bereitschaft, Gewohnheiten zu ändern. Und nicht Artikel auslassen - dies erfordert einige Fähigkeiten, aber ist es wirklich so schwierig? Sie benachteiligen sich von Anfang an, wenn Sie es nicht tun. Eine solche Umstellung wird auch Ihre Chancen auf dem Arbeitsmarkt erheblich verbessern. Vielen Dank im Voraus.

-1voto

OpenSaned Punkte 57

if __name__ == "__main__" bedeutet, dass Sie, wenn Sie die Python-Datei normal ausführen wie python foo.py wird die spezielle Variable __name__ à "__main__" .

Wenn Sie die Datei jedoch wie "import foo" importieren, wird sie __name__ à "foo" und wird die Funktion nicht ausführen.

-2voto

Sindhukumari P Punkte 182

Wenn Sie das Modul (die Quelldatei) ausführen, wird die wenn Bedingung prüft, ob das Modul direkt oder aus einer anderen Quelldatei aufgerufen wird. Direkt bedeutet hier nicht importiert.

Wenn es direkt zur Ausführung aufgerufen wird, wird der Modulname auf "main" gesetzt und der Code innerhalb der wenn Block ausgeführt werden.

3 Stimmen

Steht das nicht schon in einer bestehenden Antwort?

-3voto

Mohammed Awney Punkte 1009

Einfach gesagt, ist es der Einstiegspunkt, um die Datei auszuführen, wie die main Funktion in der C Programmiersprache.

15 Stimmen

Bei dieser Antwort wird davon ausgegangen, dass der Auftraggeber (oder jeder Benutzer mit einer ähnlichen Frage) sowohl mit C und weiß, was ein Einstiegspunkt ist.

8 Stimmen

Diese Antwort geht auch davon aus, dass kein Code (außer Definitionen ohne Seiteneffekte) vor der if __name__ == "__main__" blockieren. Technisch gesehen ist der Anfang des ausgeführten Skripts der Einstiegspunkt des Programms.

2 Stimmen

Das ist falsch und trägt wahrscheinlich zu den vielen, vielen Anfängerskripten bei, die den gesamten Code sinnloserweise in diesen Block packen.

-6voto

Ultron Punkte 43

Die einfache Antwort ist der Code, der unter if geschrieben wird Name \== " Haupt ": wird nicht ausgeführt, wenn Sie es in eine andere Datei importieren

1 Stimmen

Dies wurde bereits von anderen Antworten abgedeckt. Können Sie zusätzliche Informationen hinzufügen, um der Diskussion mehr Wert zu verleihen? Vielen Dank!

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