Python main()函数解析

__main__ — Top-level script environment

'__main__'是顶级代码执行的作用域的名字。

当一个模块从标准input, 一个脚本文件,或一个交互命令read读入时,它的__name__等于'__main__'。

程序入口

C 和 C++ 都需要有一个 main 函数来作为程序的入口,也就是程序的运行会从 main 函数开始。同样,Java 和 C# 必须要有一个包含 Main 方法的主类来作为程序入口。

#include <stdio.h>
 
int main()
{
    /* 我的第一个 C 程序 */
    printf("Hello, World! 
");
 
    return 0;
}

而 Python 则有不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。

一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。

例如,下面的例子。

#linshi.py
PI = 3.14

def main():
    print ("PI:", PI)
main()
#example.py
from linshi import PI

def calc_round_area(radius):
    return PI * (radius ** 2)

def main():
    print ("round area: ", calc_round_area(2))

main()

执行python3 example.py后在输出:

PI: 3.14
round area:  12.56

这是因为linshi.py中有main()这行代码。实际上不希望运行linshi.py中的main函数。修改linshi.py:

PI = 3.14

def main():
    print ("PI:", PI)

# main() 加上一个判断:
if __name__ == '__main__':
    main()

解释:

example.py从命令行read时,__name__就等于'__main__'。

linshi.py作为模块导入时,__name__则被赋值为模块自身的名字,即linshi。

Python -m 参数解析

https://a7744hsc.github.io/python/2018/05/03/Run-python-script.html

原文地址:https://www.cnblogs.com/chentianwei/p/11912463.html