13.__name__ 与 __main__
----------------------------------------------------------------------补充解读---------------------------------------------------------------------
平时我们经常会看到这样的 Python 代码:
if __name__ == "__main__":
main()
在 Python 中,__name__ 和 __main__ 是两个与模块和脚本执行相关的特殊变量。
__name__ 和 __main__ 通常用于控制代码的执行方式,尤其是在模块既可以作为独立脚本运行,也可以被其他模块导入时。
1. __name__ 变量
__name__ 是一个内置变量,用于表示当前模块的名称。
__name__ 的值取决于模块是如何被使用的:
当模块作为主程序运行时:__name__ 的值被设置为 "__main__"。
当模块被导入时:__name__ 的值被设置为模块的文件名(不包括 .py 扩展名)。
假设有一个 module.py 文件:
print(f"模块的 __name__ 值: {__name__}")
输出会是:
模块的 __name__ 值: __main__
2. __main__ 的含义
__main__ 是一个特殊的字符串,用于表示当前模块是作为主程序运行的。
__main__ 通常与 __name__ 变量一起使用,以确定模块是被导入还是作为独立脚本运行。
3. 使用 if __name__ == "__main__": 的常见模式
在 Python 中,常见的做法是在模块的末尾添加以下代码块:
#使用方式1:直接写if语句判断name值,这种情况下,只要本模板被“import”就会运行 print("我现在被外部调用,所以我的__name__=",__name__) if __name__ == '__main__': print('hello,我是被内部调用,所以我的__name__=', __name__) else: print("我现在被外部调用,所以我的__name__=",__name__) #使用方式2:在方法里进行判断name,从而区分开要执行的逻辑,不过是要目标方法被调用时才会执行 def sayHello(): if __name__ == '__main__': print('hello,我是被内部调用,所以我的__name__=', __name__) else: print("我现在被外部调用,所以我的__name__=",__name__) def fun(): print("我是给外部调用的方法")
总结
-
__name__是一个内置变量,表示当前模块的名称。 -
当模块作为主程序运行时,
__name__的值是"__main__"。 -
当模块被导入时,
__name__的值是模块的文件名。 -
使用
if __name__ == "__main__":可以控制模块在被导入时不会执行某些代码,而只有在作为独立脚本运行时才会执行这些代码。
跨平台最佳实践
无论系统如何,始终将多进程逻辑包裹在 if __name__ == '__main__': 中,原因如下:
-
避免 Windows 递归错误
确保代码在 Windows 上可运行。 -
防止意外副作用
避免子进程重复执行模块级别的初始化代码(如日志配置、资源加载)。 -
提升代码可读性
明确区分模块导入和直接执行的逻辑。

浙公网安备 33010602011771号