在 Python 模块中看到 if __name__ == '__main__': 这样的代码,究竟有什么作用呢?意思是说:模块既可以被导入(到 Python shell 或者其他模块中),也可以作为脚本来执行。
__name__ 属性
所有模块都有一个内置的属性 __name__,__name__ 的值取决于如何使用这个模块。
例如,有一个名为 calc.py 的模块,包含以下代码:
print('__name__:', __name__)
当导入模块时,__name__ 是模块的文件名:
>>> import calc
__name__: calc
但是,如果将其作为脚本使用,__name__ 就是一个特殊的值 __main__:
$ python calc.py
__name__: __main__
由此,可以得出一个结论:当模块被导入时,模块名称是文件名;而当模块作为脚本独立运行时,名称为 __main__。
让模块既可以导入又可以执行
回到最初的问题:if __name__ == '__main__':?
通过上面的结论,可以推断出:只有当模块直接运行(即:不导入)时,才会执行 if 块内的代码。