if __name__ == '__main__'
就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__
的值。
__name__
__name__
是内置变量,用于表示当前模块的名字,同时还能反映一个包的结构。
所以,if __name__ == '__main__'
我们简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。
实际上,这个问题还可以衍生出其他的一些知识点,例如 __main__.py
文件与 Python 的 -m
参数。
Python 的 -m
参数用于将一个模块或者包作为一个脚本运行,而 __main__.py
文件则相当于是一个包的”入口程序“。
首先我们需要来看看 python xxx.py
与 python -m xxx.py
的区别。两种运行 Python 程序的方式的不同点在于,一种是直接运行,一种是当做模块来运行。