python编程中的if __name__ == 'main' 的作用和原理

来源:互联网 发布:mac可以装谷歌浏览器吗 编辑:程序博客网 时间:2024/06/15 18:35
1)程序入口
1.1、以C和C++为例,需要有一个main函数来作为程序的入口,也就是程序的运行会从main函数开始。
1.2、而python属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。
1.3、一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。
1.4、if __name__ == '__main__' 就相当于是 Python 模拟的程序入口。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__ 的值。


2)__name__
2.1、__name__ 是内置变量,用于表示当前模块的名字,同时还能反映一个包的结构。
2.2、如果一个模块被直接运行,则其没有包结构,其 __name__ 值为 __main__。
2.3、if __name__ == '__main__' 简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。


3)__main__.py 文件与 python -m
3.1、Python 的 -m 参数用于将一个模块或者包作为一个脚本运行,而 __main__.py 文件则相当于是一个包的”入口程序“。
3.2、总结:
1、 加上 -m 参数时会把当前工作目录添加到 sys.path 中,而不加时则会把脚本所在目录添加到 sys.path 中。
2、 加上 -m 参数时 Python 会先将模块或者包导入,然后再执行
3、 __main__.py 文件是一个包或者目录的入口程序。不管是用 python package 还是用 python -m package 运行时,__main__.py 文件总是被执行。
阅读全文
0 0