if __name__ == __main___你常常在写的 if __name__ == '__main__' 到底是个啥?

e163c00216b83a287d77215e339ddb29.png

你在写 Python 代码的时候
经常会写到这么一句if __name__ == '__main__'
市面上很多 Python 相关的教程
都是在这里一笔带过

8b81767bad8e1b2a2ba90d93aad546ab.png


有些比较好奇的 b 友
想知道为啥要这样写
刚好有人问起
小帅b今天就来告诉你为啥
那么接下来就是学习 Python 的正确姿势

bb297092edb10b10f3b758706d99ef22.png


当你在写 .py 的时候
一般是以两种方式存在的1、作为脚本直接运行了

8282a0f10bba70efe60fdd5065646564.png

2、作为模块给别人导入

e518982d6b6bef2747ba1baf683e184a.png


你的代码在被执行的时候
Python 解释器会先去
读取你的 Python 代码
然后定义一些全局的内置变量
而我们常常写的这个 __name__
就是其中的变量之一
有些人会这样判断
__name__ 的值是 __main__
就说明这里是程序入口

81d7ed80ea79e321af9ba1ca789ab5f0.png


不过这里的运行结果是

1024529ee16d9e22ae0d96a491c5ed97.png


这里按顺序运行
先执行的是打印 name
这和 java 有点不同
没有所谓的主函数public static void main(String[] args){…}
那么这个 __name__ 是来干嘛的
if __name__ == '__main__' 去掉
不也能照样运行

7e2f56ee4047e1e57a24b860c9097292.png

a9ebda70324159eb395fefce1240c17a.png


我们再定义一个方法
专门用来打印变量 name 的值

d2953fd73043f906970a9b25b3577c5b.png


直接运行
可以看到 name 的值是 main

5c529718ba67b6694fa742c2a99c47de.png


接着
我们把这个文件命名为 A.py
作为模块给 B.py 导入
直接 import A
然后运行

df6efa88a611a0a04b3f8b85cb8b5984.png


运行

bb9d17b3cdd6150ee6bea3d1319f840d.png


可以看到
A模块的调用都被执行了
而且有一点很不同的是
这里的 name 值是 A
而不是 __main__
到这里你会发现当 .py 直接运行的时候__name__的值是__main__而当 .py 被当作模块导入的时候__name__的值是模块的名称
我们接着修改一下 A.py
本来是这样的

1795ee11f09eed1b3d6e1029b65565cf.png


现在改成这样

44ee9f1725bc6b721a5e098256a8ca11.png


再运行 B.py

06dc889a3a391359b8cbbf7cc932fd9b.png


这次就不会运行到 A 的调用了

f67064259c64711dc3ead63e19ca6c6a.png


所以你的 .py 可以
作为自己的脚本运行
在 main 中做一些测试
或者本身程序的运行
当然你也可以
使用你的 .py 作为模块给别人使用
给别人提供一些便利
为了不让别人一导入你的模块
就直接运行整个脚本
使用if __name__ == '__main__'
ok,以上
希望对你有帮助
那么我们下回见peace

c0b7f9bfb27b54c9295ad58877cf9f52.gif

扫一扫学习 Python 没烦恼

4b97ac16515af5432066a037efb9a689.png


阅读原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值