[当我们运行foo.py
脚本时,将全局变量__name__
设置为"__main__"
,而在运行以下脚本时
#Here we import the foo.py module
import foo
print("This is a Stackoverflow question")
__name__
等于foo
。我的问题是,如果我们要导入另一个模块,则说foo1.py
#Here we import foo.py and foo1.py modules
import foo, foo1
print("This is still the same Stackoverflow question")
那么,在这种情况下,__name__
的值是多少?显然,以上概括适用于任意数量的模块。
P.S。在我发布问题之前,我已经亲自尝试过,答案是__main_
,这让更多人感到困惑。
__name__
始终是模块的名称。 "__main__"
仅在文件not用于创建模块时(即,作为脚本运行时)使用。
在您的第一个示例中,__name__
仅等于foo
中的foo.py
,而不等于导入foo
的文件中的。
考虑仅包含一个简单文件tmp.py
print(__name__)
如果将此文件作为脚本运行,则输出为__main__
。
$ python tmp.py
__main__
如果将其作为模块导入,则输出为tmp
。
$ python -c 'import tmp'
tmp
导入模块的名称不受在同一脚本中完成的其他导入的影响。
import foo, foo1
print(f"foo name = {foo.__name__}")
print(f"foo1 name = {foo1.__name__}")
print(f"this scripts name = {__name__}")
结果:
foo name = foo
foo1 name = foo1
this scripts name = __main__