以下回答来自于知乎:
作者:秋雨mac
链接:https://www.zhihu.com/question/49136398/answer/208021240
来源:知乎
著作权归作者所有。
在Python中,一个.py文件就是一个模块,一般情况下,模块的名字就是文件名(不包括扩展名.py)。全局变量name存放的就是模块的名字。而特殊情况就是,当一个模块作为脚本执行时或者在交互式环境中,如Ipython、Python自带的shell等直接运行代码,name的值不再是模块名,而是main。main是顶层代码执行作用域的名字。参见main — Top-level script environment:A module can discover whether or not it is running in the main scope by checking its own name, which allows a common idiom for conditionally executing code in a module when it is run as a script or with python -m but not when it is imported:if name == “main“:
# execute only if run as a script
main()
也就是说,通过name的值,我们可以判断出该模块是作为脚本正在执行还是被其他模块导入,而根据这个判断,我们就可以选择性地执行代码。将只有模块作为脚本执行时的代码放入到if name == ‘main‘:
条件中,比如执行单元测试等。而当模块被其他模块通过import等语句导入时,Python解释器会首先检查模块注册表sys.modules中是否有该模块,如果有,则直接利用存在的模块对象的名字空间中的变量;如果没有,创建一个空的模块对象,将其添加到sys.modules中,在以该模块名为名的名字空间下执行该模块,除了if name == ‘main‘: 条件中的代码,而被执行代码中定义的变量在该名字空间下都是可访问的。