经常会看到这样的 Python 代码
python
if __name__ == "__main__":
main()
- 在 Python 中,name 和 main 是两个与模块和脚本执行相关的特殊变量
- name 和 main 通常用于控制代码的执行方式,尤其是在模块既可以作为独立脚本运行,也可以被其他模块导入时
name 变量
- 内置变量,用于表示当前模块的名称
- name 的值取决于模块是如何被使用的
当模块作为主程序运行时:name 的值被设置为 "main"
当模块被导入时:name 的值被设置为模块的文件名(不包括 .py 扩展名)
假设有一个 module.py 文件
pythonprint(f"模块的 __name__ 值: {__name__}")输出是 模块的 name 值: main
main 的含义
- 特殊的字符串,用于表示当前模块是作为主程序运行的
- main 通常与 name 变量一起使用,以确定模块是被导入还是作为独立脚本运行
使用 if name == "main": 的常见模式
常见的做法是在模块的末尾添加以下代码块
python
if __name__ == "__main__":
# 这里的代码只有在模块作为主程序运行时才会执行
main()
这种模式允许模块在被导入时不会执行某些代码,而只有在作为独立脚本运行时才会执行这些代码
实例
假设有一个名为 example.py 的模块
pythondef greet(): print("来自 example 模块的问候!") if __name__ == "__main__": print("该脚本正在直接运行。") greet() else: print("该脚本作为模块被导入。")输出是
该脚本正在直接运行。
来自 example 模块的问候!这种情况下,name 的值是 "main",所以 if name == "main": 块中的代码会被执行
导入 example.py
如果在另一个脚本中导入 example.py
python# another_script.py import example example.greet()输出
该脚本作为模块被导入。
来自 example 模块的问候!这种情况下,name 的值是 "example"(模块名),所以 if name == "main": 块中的代码不会被执行
总结
-
__name__是内置变量 ,表示当前模块的名称 -
当模块作为主程序运行 ,
__name__的值是"__main__" -
当模块被导入 ,
__name__的值是模块的文件名 -
使用
if __name__ == "__main__":可以控制模块在被导入时不会执行某些代码,而只有在作为独立脚本运行时才会执行这些代码
++内容借鉴于菜鸟教程,感谢++ Python name 与 main | 菜鸟教程
https://www.runoob.com/python3/python3-name-main.html