Python __name__与“__main__“是什么意思?

前言

我们在模块文件的底部,经常会看到__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、看不懂没关系,多看几遍就懂了………………

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值