为什么Python没有main()函数?
在这篇文章中,我们将学习为什么Python没有main()函数。
毫无疑问,Python **没有**所谓的**主函数**,但是,互联网上的文章经常提到“**Python的主函数**”和“**建议编写主函数**”。
他们的目的可能是为了复制原始的主要方法,但是许多人因此被误导(或误解),并创建了极其复杂的代码。
在我们开始之前,我们将回答以下两个问题:
“主函数”到底是什么?
为什么一些编程语言需要使用主函数?
一些编程语言,例如C/C++、C#、Java、Go、Rust等,使用主函数作为程序的执行入口,这具有特殊的含义:
此主函数名称是必需的,这意味着必须有一个主函数。
因为只能有一个主函数,所以每个程序入口都是唯一的。
语法格式有特定的要求,并遵循非常一致(固定)的模板。
为什么必须强制执行主入口函数?
这些是编译型语言,需要将代码编译成可执行二进制文件,以便操作系统/引导加载程序找到程序的起始位置,因此必须定义此函数。
简单来说,在一大堆可执行代码中,必须定义一个明确的开始。
主函数是这些语言的一个重要的有机特性。
但是,当我们回到Python时,情况发生了巨大的变化。
Python是一种解释型语言,也称为脚本语言。运行过程从上到下,一行一行地运行,这意味着它的起始点是已知的。
每个**.py文件**都是一个可执行文件,可以用作程序的入口点,这意味着程序的入口点是灵活的,不需要遵循任何约定。
在不指定入口文件(更常见的命令行,例如“**python -m http.server 8000**”)的情况下执行Python项目时,可能是因为存在main.py文件,该文件作为包中的一个“文件”来执行操作。
总而言之,脚本语言Python与编译型语言不同。它可以选择在单个模块(即.py文件)级别或由许多模块组成的包级别灵活的执行方式,这与其他无法在没有明确定义的入口的情况下实现的语言不同。
换句话说,Python不需要程序员在语法级别上指定统一的入口(无论是函数、类还是其他)。
一些用户可能会感到困惑,因为他们经常遇到或编写以下代码:
# defining the main function using the def keyword def main(): …… if __name__ == '__main__': main()
这不是Python的主函数吗?我相信我们很多人都会同意!
不,它不是。
除了函数名称为“**main**”之外,它与我们前面描述的正统主函数没有任何联系,它既不是必需的,也不一定控制程序执行的顺序。没有它也不会导致任何语法问题。
有些人希望标识一个“**main**”函数来强调其“主要”状态,并将其人工放置为第一个执行的函数。
他们可能认为这样命名的函数更容易记住。
他们可能希望编写`if __name__ == '__main__':`来表明`main()`仅在直接执行当前脚本时运行,而当将其导入其他模块时不应执行。
但是,我们不建议这种编写风格。
最常见的例子:只有几十行代码或一个实现简单功能的脚本文件(一个小爬虫,用turtle画图等),但它们都以与之前相同的方式编写。
由于以下原因,不建议编写`if __name__ == '__main__':`:
首先,如果只有一个文件,因为没有导出选项。
其次,如果有多个文件,强烈不建议在入口文件(main.py)中编写此语句。因为它作为起点,其内容不应导出以供其他模块使用。
最后,不建议在有多个文件的非入口文件中编写此判断,因为最多只能创建一些这样的测试程序。但是,测试代码应该分开存储在单独的目录或文件中。
每当我遇到这种复杂的代码而没有思考时,我都会感到担忧。你为什么写那个if语句?如果可能的话,拆分主函数,甚至不要把它包装在一个函数中!
总结
摆脱惯性思维,构建真实的代码。主入口函数是某些语言所特有的,不应在Python中使用。你应该理解脚本语言的特性,并以简洁明了的方式编写。
使用**main.py**代替**main()**。因为Python的程序执行单元是脚本文件而不是函数或类,所以入口文件应该命名为main.py,内部函数则根据需求决定。
如果可行,请使用main.py作为入口文件。此文件易于与命令行上的“-m”参数结合使用。
结论
在这篇文章中,我们学习了为什么Python与其他编程语言不同,它没有main()函数。我们还学习了条件`__name__ == '__main__'`。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP