python 中 if __name__ == '__main__'
当我们编写 Python 模块时,有时候需要让某些代码只在该模块作为主程序运行时才执行,而不是被其他模块 import 引入时就执行。这时候可以使用 if __name__ == '__main__'
这个条件语句。
什么是 name 变量
在 Python 中,每个模块(Python 文件)都有一个内置变量 __name__
,用于指示当前模块的名称。当模块被直接运行时,__name__
的值为 "__main__"
;当模块被其他模块 import 引入时,__name__
的值为该模块的名称。
例如,在模块 test.py
中,我们可以使用下面的代码来输出 __name__
的值:
print(__name__)
当我们直接运行该模块时,输出的结果为:__main__
。
如果在另一个模块中引入了 test.py
,并调用其中的函数或变量,那么 test.py
中的 __name__
变量的值就会变成 "test"
。
if name == 'main' 的作用
使用 if __name__ == '__main__'
条件语句,可以让一部分代码只在该模块作为主程序运行时执行,而不会在被其他模块导入时执行。
具体地说,当 Python 执行一个文件时,它会把该文件名赋值给 __name__
变量,并且执行该模块中所有没有缩进的代码。因此,如果我们想要让某些代码仅在该模块作为主程序运行时才被执行,可以将这部分代码放在 if __name__ == '__main__'
语句块中。
例如,下面是一个简单的例子:
def main():
print("This is the main program.")
def func():
print("This is a function.")
if __name__ == '__main__':
main()
func()
在这个例子中,我们定义了两个函数 main()
和 func()
,其中 main()
函数打印出 "This is the main program.",func()
函数打印出 "This is a function."。
在 if __name__ == '__main__'
语句块中,我们调用了 main()
和 func()
函数。因此,只有当该模块作为主程序运行时,这两个函数才会被执行。如果该模块被其他模块引入,if __name__ == '__main__'
条件不成立,这部分代码也就不会被执行。
常见应用场景
- 单元测试:我们可能会将一些测试代码放在模块中,在开发阶段通过
if __name__ == '__main__'
来确保测试代码只在模块作为主程序运行时执行。 - 调试代码:我们也可以将调试代码放在模块中,在开发阶段通过
if __name__ == '__main__'
来确保调试代码只在模块作为主程序运行时执行。 - 命令行工具:当我们编写命令行工具时,通常将解析命令行参数的代码放在
if __name__ == '__main__'
语句块中。这样,当用户从命令行调用该工具时,解析命令行参数的代码就会被执行。
总结
if __name__ == '__main__'
是 Python 中的常用条件语句,用于判断当前模块是否为主程序运行的模块。这个语句块可以让一部分代码只在该模块作为主程序运行时才执行,而不会在被其他模块