前言
我们在模块文件的底部,经常会看到__name__与"__main__",它们是什么意思呢?为啥要使用这一行代码?读完本篇文章,将解答你得疑问。
if __name__ == "__main__":
pass
__name__ 与"__main__"分别是什么?
__name__是当前模块的一个属性,属性名称前后各有两个_修饰,表明它是内置属性(也称内置变量),表示当前模块的名称
"__main__"是1个字符串对象,"xxxx",一对双引号是创建字符串对象的快捷方式,也称为字符串字面量
==又是什么呢?
== 用来比较对象是否相等!由于比较的是字符串,所以==在这里比较的是字符串内容是否相等。
__name__ == "__main__" 写在一起表示什么?
当前模块的__name__属性的值是否等于字符串"__main__",如果__name__的值等于"__main__"则==会返回True、如果__name__的值不是"__main__",则==会返回False
__name__的值什么时候等于"__main__"呢??
如果当前模块是Python程序的入口模块(也称顶级模块、脚本文件),则当前模块的__name__属性的值是"__main__"
举个例子
1、先定义一个模块:my_first.py
2、然后命令行执行:python my_first.py
3、此时my_first模块的__name__属性值是"__main__"
__name__属性的值不是"__main__"时,会是什么?
如果当前模块不是程序的入口模块(顶级模块),__name__属性的值是"当前模块名",说明当前模块是被其他模块导入时运行的!
举个例子
1、先定义一个模块:my_first.py
2、再定义一个模块:main.py,下面有一个import语句,导入my_first模块
import my_first
3、此时my_first模块的__name__属性值是"my_first"
什么时候使用__name__=="__main__"?
重点得一句话:当你的一个模块即要作为脚本程序、又要作为导入模块,使用__name == "__main__"才有它的价值,否则这段代码可以不写。当然,我们习惯在作为脚本的模块下面写上这一行,虽然不作为导入模块。
1、做脚本:如果当前模块是程序的入口模块(顶级模块),则是作为程序执行的入口,此时的模块文件作为脚本独立运行,__name == "__main__"的代码块中执行想执行的代码,哈哈
2、做测试:如果当前模块不是入口模块,我们也可以利用模块作为程序的入口特性做测试工作,在 if __name__ == "__main__"修饰的代码块中调用一些测试代码,同样还是想执行的代码,哈哈
总结
1、每个Python模块(.py结尾的Python模块文件)都包含内置变量__name__(也称内置属性),它代表当前模块的名字
2、当模块作为程序入口执行时,即作为脚本程序执行时,__name__值等于"__main__"
3、当模块import到其他模块执行时,__name__的值等于"模块名"(注意:不包含模块文件的后缀.py)
4、模块作为程序入口执行时,即作为脚本执行时,__name__ == '__main__'的结果为True,此时在if代码块中的语句可以运行!
5、模块import到其他模块执行时,__name__ == '__main__'的结果为False,因为此时__name__的值为模块名称(不含.py),此时在if代码块中的语句并不会执行!
6、看不懂没关系,多看几遍就懂了………………