美文网首页
[Python]理解 if __name__ == '__mai

[Python]理解 if __name__ == '__mai

作者: 胖三斤66 | 来源:发表于2018-07-14 12:39 被阅读0次

前言

在很多代码中经常遇见if __name__ == '__main__',那么具体是什么作用呢?下面我来跟大家讲解了一下。

作用

众所周知,Python 编写的文件既可以直接运行,也可以当作模块被引用。不管是直接运行,还是引用,最顶层的代码(以缩进划分层次)都会被执行。而现实应用中,部分代码不希望在导入中执行(比如单元测试代码)。

if __name__ == '__main__'的作用就是让放在它里面的代码块只有在直接运行时才执行,作为模块被引用时不执行。

举个例子,下面是一个 python 脚本文件test.py

test.py
print('outside1')
if __name__ == '__main__':
  print('inside')
print('outside2')

在控制台,直接执行test.py脚本时

直接执行脚本

但如果是把 test.py 当作模块引用时,可以看到最顶层的代码也会被执行,而为什么没有执行print('inside'),是因为if判断语句没有通过。

当作模块引用

原理

原因就是 __name__ 这个内置变量。
内置变量 __name__ 用于表示当前模块的名字。当直接执行当前模块 ,__name__ 就等于 __main__ ;而当引用当前模块时, __name__ 就等于完整的包名
举个例子,这是一个 Python 源码文件 test.py

test.py
print(__name__)

当直接执行时, __name__ 就等于 __main__

> python3 test.py
__main__

当引用当前模块时,__name__ 就等于完整的包名

> python3
>>> import test
test

最后

如果学过 C 或者 C++,知道程序入口是一个 main 函数。if __name__ == '__main__':的作用跟这个 main 函数相似,可以看作 Python 模拟的程序入口。而事实上,Python 是从源码文件的第一行开始,逐行解释然后运行,没有统一的程序入口。所以if __name__ == '__main__': 只能说是模拟的程序入口。

参考文献

  1. http://www.dengfeilong.com/post/60.html
  2. https://www.cnblogs.com/kex1n/p/5975575.html
  3. http://blog.konghy.cn/2017/04/24/python-entry-program/

相关文章

网友评论

      本文标题:[Python]理解 if __name__ == '__mai

      本文链接:https://www.haomeiwen.com/subject/qkyrpftx.html