当你直接运行一个 python 文件时,无论该文件导入了多少其他的模块,__name__ 的值仍然是 "__main__"。这是因为 __name__ 的值是由 python 解释器根据脚本的运行方式来设定的,而不是由脚本内部的导入语句决定的。
先总结
- 一个py文件对应一个
__name__ - 文件直接运行时:当一个文件被直接运行时,它的
__name__是"__main__"。 - 文件被调用时:当一个文件被其他文件调用时,它的
__name__是该文件的名字(不带.py扩展)。
当直接运行 main.py
假设你有以下文件结构:
module_a.pymodule_b.pymain.py
当直接运行 main.py 时,main.py 的 __name__ 会是 "__main__"。因此,if __name__ == "__main__": 里的代码会被执行。
# main.py
import module_a
import module_b
def main():
print("main program started")
module_a.greet_a("alice")
module_b.greet_b("bob")
if __name__ == "__main__":
main()
当你执行 python main.py 时,输出将是:
main program started
hello, alice! (from module_a)
hello, bob! (from module_b)
当 main.py 在另一个脚本中被调用
如果 main.py 被另一个脚本导入,那么 main.py 的 __name__ 将是 "main"(取决于文件名),因此 if __name__ == "__main__": 里的代码不会被执行。
假设你有另一个脚本 runner.py:
# runner.py
import main
print("runner script started")
main.main() # 显式调用 main 函数
当你执行 python runner.py 时,输出将是:
runner script started
main program started
hello, alice! (from module_a)
hello, bob! (from module_b)
总结
因此,无论你在 main.py 中导入了多少其他的模块,只要你是直接运行 main.py,它的 __name__ 就会是 "__main__",if __name__ == "__main__": 里的代码就会被执行。
到此这篇关于python中__name__的具体使用的文章就介绍到这了,更多相关python __name__内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论