你在写 Python 代码的时候

经常会写到这么一句



if __name__ == '__main__' 



市面上很多 Python 相关的教程

都是在这里一笔带过




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




有些比较好奇的 b 友

想知道为啥要这样写



刚好有人问起

小帅b今天就来告诉你为啥



那么接下来就是

学习 Python 的正确姿势



当你在写 .py 的时候

一般是以两种方式存在的



1、作为脚本直接运行了




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




2、作为模块给别人导入




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




你的代码在被执行的时候



Python 解释器会先去

读取你的 Python 代码



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



而我们常常写的这个 __name__

就是其中的变量之一



有些人会这样判断

 __name__ 的值是 __main__

就说明这里是程序入口




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




不过这里的运行结果是




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




这里按顺序运行

先执行的是打印 name



这和 java 有点不同

没有所谓的主函数




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




那么这个 __name__ 是来干嘛的

 if __name__ == '__main__' 去掉

不也能照样运行




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

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





我们再定义一个方法

专门用来打印变量 name 的值





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




直接运行

可以看到 name 的值是 main




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




接着

我们把这个文件命名为 A.py 

作为模块给 B.py 导入


直接 import A

然后运行




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




 运行




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




可以看到

A模块的调用都被执行了



而且有一点很不同的是

这里的 name 值是 A

而不是 __main__



到这里你会发现


当 .py 直接运行的时候

__name__的值是__main__


而当 .py 被当作模块导入的时候

__name__的值是模块的名称




我们接着修改一下 A.py


本来是这样的




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





现在改成这样




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




再运行 B.py




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




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




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




所以你的 .py 可以

作为自己的脚本运行



在 main 中做一些测试

或者本身程序的运行



当然你也可以

使用你的 .py 作为模块给别人使用

给别人提供一些便利


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

就直接运行整个脚本


使用


if __name__ == '__main__' 

 


ok,以上

希望对你有帮助

那么我们下回见

peace

相关文章: