在很多开发语言中,都有一个叫做mian的主函数,这个函数一般都是程序的入口,当程序启动时,首先执行这个函数。
比如C#语言中的main函数长这个样子。
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
在Python中,有时候可以看到这样的代码if __name__=="__main__":,看起来是不是有点像其他语言中的主函数,到底这段代码是什么意思呢?
有句话经典的概括了这段代码的意义。
“Make a script both importable and executable”
大致的意思就是你写的模块既可以导入到别的模块中用,也可以在模块本身执行使用。
我们编写一个简单的函数,并对这些函数做调用。通过下段代码演示这一过程,源代码见code\6\func_main.py。
def show():
print("这是一个简单的函数")
print("无论如何,我都会输出")
print("__name__变量为:" __name__)
if __name__=="__main__":
print("我要开始测试了")
show()
代码执行结果如下。
无论如何,我都会输出
__name__变量为:__main__
我要开始测试了
这是一个简单的函数
直接运行上述文件,则__name__的值是'__main__',从而if __name__ == '__main__'语句执行。
我们再编写一个程序,并对这些函数做调用。通过下段代码演示这一过程,源代码见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__'中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行。
,