Python中main函数的使用

在查看Python代码中,经常会看到类似这样的代码:

1
2
3
4
5
6
# module.py
def example() -> None:
print("This is an example.")

if __name__ == '__main__':
example()

这里直接运行文件可以获得输出内容:

1
2
$ python3 module.py
This is an example.

现在我们在另一个文件中将module.py作为模块导入并运行:

1
2
3
4
# main.py
from module import example

example()
1
2
$ python3 main.py
This is an example.

我们修改module.py文件,在测试中我们经常会这么写:

1
2
3
4
5
# module.py
def example() -> None:
print("This is an example.")

example()

分别运行module.py main.py

1
2
3
4
5
6
$ python3 module.py
This is an example.

$ python3 main.py
This is an example.
This is an example.

我们注意到,main.py在运行时输出了两遍。这是因为python解释器第一次导入一个模块时,解释器会为我们找到并执行其顶层代码。其中包括任何变量声明、函数和类定义,以及任何顶层的可执行代码。

故为了避免我们将文件作为模块导入使用时运行不必要的代码,需要使用if __name__ == "__main__": 对当作模块导入时不需要运行的部分进行屏蔽。

但是,当作模块导入并不需要使用if __name__ == "__main__": 的情况也会存在,其中最有名的就是import this使得程序在运行时输出大名鼎鼎的PEP 20 – The Zen of Python

在代码测试部分中添加if __name__ == '__main__':避免不必要的初始化是一个好习惯,也可以按照需求进行选择。