为什么Python中没有main()函数?
在本文中,我们将学习为什么Python中没有main()函数。
毫无疑问,Python没有所谓的main函数,但是互联网上的文章经常引用“Python的main函数”和“建议写main函数”。他们的目的可能是复制原始的主函数,但是很多人被误导(或误解)并因此创建极其复杂的代码。
在开始之前,我们会回答以下两个问题-
- 什么是“主函数”?
-
为什么一些编程语言需要使用主函数?
一些编程语言,如C/C++、C#、Java、Go、Rust等,将main函数作为程序的执行入口,具有特定的含义-
- 这个main函数名称是必需的,这意味着必须有一个主函数。
-
因为只能有一个main函数,所以每个程序进入都是唯一的。
-
语法格式有具体的要求,并遵循非常一致(fixed)的模板。
阅读更多:Python 教程
为什么必须要创建主入口函数?
这些是编译语言,需要将代码编译成可执行的二进制文件,以便操作系统/引导程序找到程序的启动点,因此必须定义这个函数。
简而言之,在一个庞大的可执行代码堆栈中必须定义一个重要的开始。
主函数是这些语言的重要有机特征。
然而,当我们回到Python时,情况发生了巨大的变化。
- Python是一种解释性语言,也称为脚本语言。运行过程从上到下,一行一行地运行,这意味着它的起始点是已知的。
-
每个.py文件都是可执行文件,可以用作程序的入口点,意味着程序的入口点是灵活的,不必遵循任何约定。
-
在没有指定入口文件的情况下执行Python项目(更典型的命令行,例如” python -m http.server 8000″),可能是由于存在main.py文件,该文件作为“文件”在包中执行操作。
总之,脚本语言Python不同于编译语言。它可以在单个模块(即.py文件)的级别或由许多模块组成的包级别上选择灵活的执行技术,而其他语言则不能在没有定义明确入口的情况下执行。
换句话说,Python不需要程序员在语法级别指定统一的入口(无论是函数、类还是其他)。
一些用户可能会感到困惑,因为他们经常会遇到或编写以下代码 −
这不是Python的主函数吗? 我相信我们中的许多人都会同意! –
不,不是。
除了函数名是“main”外,它没有任何与我们之前描述的正统主函数的联系,它不是必需的,也不一定控制程序执行的顺序。如果没有它,不会引起任何语法问题。
有些人希望识别一个“主”函数,以强调它的“主要”状态,并将其人为地放置为第一个被执行的函数。
他们可能认为这样命名的函数更容易记忆。
在计算机范畴中,如果希望表明main()仅在当前脚本直接执行时运行,不应在其它模块中导入时运行,那么可以写成 if name‘main’。
但是我们不建议采用这种写法。
最常见的情况是,只有几十行代码或脚本文件实现了一个简单的功能(小型爬虫、使用turtle绘制图片等),但它们都与以前的代码一样编写。
由于以下原因,不建议写成 if name__‘main‘:
- 首先,如果只有一个文件,则没有导出选项。
-
其次,如果有多个文件,在入口文件(main.py)中编写此语句是强烈不建议的。因为它是起点,其内容不应导出供其他模块使用。
-
最后,对于有多个文件的非入口文件,不建议编写此判断语句,因为最多只能创建一些测试程序。但是,测试代码应分离并保存在单独的目录或文件中。
每次遇到这种复杂的代码时,我都会感到担忧,想一想,你为什么要写那个if语句?如果可能的话,即使不用将其封装在函数中,也应将main函数分解!
总结
- 打破惯性思维,构建真实的代码。主入口函数对某些语言是唯一的,但在Python中不应使用。您应该理解脚本语言的特点,以简单而有吸引力的风格编写代码。
-
使用main.py而不是main()。因为Python的程序执行单元是脚本文件而不是函数或类,入口文件应该命名为main.py,内部函数由要求决定。
-
如果可能的话,请使用main.py作为入口文件。该文件很容易与命令行参数“-m”结合使用。
结论
在本文中,我们了解到为什么Python没有像其他编程语言那样的main()函数。我们还了解了条件__name__=='__main__'
。