-2

Ich versuche, in Python-Modulen eine Hands-on zu bekommen.Python __name__ globale Variable gibt andere Ausgabe als erwartet

mein Code,

#filename:module.py 
def printname(): 
    print __name__ 

printname() 

, wenn ich den Code mit Dolmetscher bin Ausführung

python module.py 

Es gibt Ausgang (dh Modulname als)

main 

und wenn ich importieren das Modul in eine andere Datei und ruft das Modul dort auf, gibt es die Ausgabe als Modulname (erwartet).

module 

nach docs, sollte es Modulnamen als Ausgabe geben. Warum ist die Variation in der Ausgabe?

+0

Auch nach den Dokumenten, nein: https://docs.python.org/2/tutorial/modules.html?highlight=__name__#executing-modules-as-scripts – deceze

Antwort

2

Das Hauptskript ist immer genannt __main__. Das ist völlig richtiges Verhalten.

Von der gleichen Seite, die Sie verknüpfen, im preceding Executing modules as scripts section, finden Sie:

Wenn Sie eine Python-Modul laufen mit

python fibo.py <arguments> 

den Code in dem Modul wird ausgeführt, als ob Sie es importiert hätten, aber mit __name__ auf "__main__" gesetzt.

Für alles Sie importieren, __name__ wird den Modulnamen widerspiegeln, unter denen sie verfügbar war zuerst.

Siehe auch die Interface options documentation:

<script>

[...]

Wenn die Skriptnamen direkt an eine Python-Datei verweisen, das Verzeichnis die Datei enthält, wird hinzugefügt Der Start von sys.path und die Datei wird als __main__ Modul ausgeführt.

und die __main__ Top-level script environment documentation:

Dieses Modul stellt den (ansonsten anonym) Umfang, in dem die Hauptprogramm der Interpreter führt - Befehle entweder von der Standardeingabe, aus einer Skriptdatei gelesen oder von einer interaktiven Eingabeaufforderung .