前言
模块文件的底部,我们经常看见__name__与"__main__"的代码,如下
if __name__ == "__main__":
pass
而__name__ == "__main__"的结果可能是True、也可能是False,这是为什么呢??
__name__ 与"__main__"分别是什么?
__name__是当前模块的一个属性,属性名称的前后各有两个_修饰,表明它是一个内置属性(也称内置变量),表示当前模块的名称
"__main__"是一个字符串对象,"xx",一对双引号是创建字符串对象的快捷方式,也称为字符串字面量
==是什么呢?
== 用来比较对象的内容是否相等!
__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__"经常用来干嘛??
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、看不懂没关系,多看几遍就懂了………………