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

182 阅读2分钟
原文链接: zhuanlan.zhihu.com

你在写 Python 代码的时候
经常会写到这么一句


if __name__ == '__main__'


市面上很多 Python 相关的教程
都是在这里一笔带过







有些比较好奇的 b 友

想知道为啥要这样写


刚好有人问起
小帅b今天就来告诉你为啥


那么接下来就是
学习 Python 的正确姿势




当你在写 .py 的时候
一般是以两种方式存在的


1、作为脚本直接运行了







2、作为模块给别人导入







你的代码在被执行的时候


Python 解释器会先去
读取你的 Python 代码


然后定义一些全局的内置变量


而我们常常写的这个 __name__
就是其中的变量之一


有些人会这样判断
__name__ 的值是 __main__

就说明这里是程序入口







不过这里的运行结果是







这里按顺序运行
先执行的是打印 name



这和 java 有点不同
没有所谓的主函数



public static void main(String[] args){…}



那么这个 __name__ 是来干嘛的
if __name__ == '__main__' 去掉
不也能照样运行











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








直接运行

可以看到 name 的值是 main







接着

我们把这个文件命名为 A.py
作为模块给 B.py 导入

直接 import A
然后运行







运行








可以看到
A模块的调用都被执行了


而且有一点很不同的是
这里的 name 值是 A
而不是 __main__


到这里你会发现

当 .py 直接运行的时候

__name__的值是__main__

而当 .py 被当作模块导入的时候
__name__的值是模块的名称



我们接着修改一下 A.py


本来是这样的








现在改成这样







再运行 B.py







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







所以你的 .py 可以
作为自己的脚本运行


在 main 中做一些测试
或者本身程序的运行



当然你也可以
使用你的 .py 作为模块给别人使用
给别人提供一些便利

为了不让别人一导入你的模块

就直接运行整个脚本

使用

if __name__ == '__main__'




ok,以上

希望对你有帮助
那么我们下回见
peace




扫一扫
学习 Python 没烦恼


阅读原文