python 中 if __name__ == '__main__'

发布时间 2023-08-24 20:53:39作者: 白露~

当我们编写 Python 模块时,有时候需要让某些代码只在该模块作为主程序运行时才执行,而不是被其他模块 import 引入时就执行。这时候可以使用 if __name__ == '__main__' 这个条件语句。

什么是 name 变量

在 Python 中,每个模块(Python 文件)都有一个内置变量 __name__,用于指示当前模块的名称。当模块被直接运行时,__name__ 的值为 "__main__";当模块被其他模块 import 引入时,__name__ 的值为该模块的名称。

例如,在模块 test.py 中,我们可以使用下面的代码来输出 __name__ 的值:

python复制代码
print(__name__)

当我们直接运行该模块时,输出的结果为:__main__

如果在另一个模块中引入了 test.py,并调用其中的函数或变量,那么 test.py 中的 __name__ 变量的值就会变成 "test"

if name == 'main' 的作用

使用 if __name__ == '__main__' 条件语句,可以让一部分代码只在该模块作为主程序运行时执行,而不会在被其他模块导入时执行。

具体地说,当 Python 执行一个文件时,它会把该文件名赋值给 __name__ 变量,并且执行该模块中所有没有缩进的代码。因此,如果我们想要让某些代码仅在该模块作为主程序运行时才被执行,可以将这部分代码放在 if __name__ == '__main__' 语句块中。

例如,下面是一个简单的例子:

python复制代码
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 中的常用条件语句,用于判断当前模块是否为主程序运行的模块。这个语句块可以让一部分代码只在该模块作为主程序运行时才执行,而不会在被其他模块