在很多开发语言中,都有一个叫做mian的主函数,这个函数一般都是程序的入口,当程序启动时,首先执行这个函数。

比如C#语言中的main函数长这个样子。

static void Main(string[] args)

{

Console.WriteLine("Hello World!");

}

在Python中,有时候可以看到这样的代码if __name__=="__main__":,看起来是不是有点像其他语言中的主函数,到底这段代码是什么意思呢?

有句话经典的概括了这段代码的意义。

“Make a script both importable and executable”

大致的意思就是你写的模块既可以导入到别的模块中用,也可以在模块本身执行使用

python魔法函数main作用(你必须要知道的Python中的main函数)(1)

我们编写一个简单的函数,并对这些函数做调用。通过下段代码演示这一过程,源代码见code\6\func_main.py。

def show():

print("这是一个简单的函数")

print("无论如何,我都会输出")

print("__name__变量为:" __name__)

if __name__=="__main__":

print("我要开始测试了")

show()

代码执行结果如下。

无论如何,我都会输出

__name__变量为:__main__

我要开始测试了

这是一个简单的函数

直接运行上述文件,则__name__的值是'__main__',从而if __name__ == '__main__'语句执行。

python魔法函数main作用(你必须要知道的Python中的main函数)(2)

我们再编写一个程序,并对这些函数做调用。通过下段代码演示这一过程,源代码见code\6\func_main_test.py。

import func_main

func_main.show()

代码执行结果如下。

无论如何,我都会输出

__name__变量为:func_main

这是一个简单的函数

其中定义的main()函数只有当Python脚本直接作为执行程序时才会执行,当Python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行。

这是由于当你以单个文件运行时,__name__便是__main__,当你以模块导入使用时,这个属性便是这个模块的文件名。

函数__main__的一个用处就是调试代码的时候,在if __name__ == '__main__'中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行。

,