为何 Python 没有 main 函数?

为何 Python 没有 main 函数?python

众所周知,Python中没有所谓的main函数,可是网上常常有文章提到“ Python的main函数”和“建议编写main函数”。程序员

其实,可能他们是想模仿真正的main函数,可是许多人都被误导(或误解),而后编写了很是笨拙的代码。面试

在本文中,咱们来讨论一下为何Python没有main函数。编程

在开始讨论以前,咱们先来回答如下两个问题:网络

所谓的“main函数”到底是什么意思?架构

为何有些编程语言必须编写main函数?运维

一些编程语言将main函数做为程序的执行入口,好比C/C++、C#、Java、Go、Rust等等,这个函数具备特定的含义:编程语言

main函数名是必须的,这意味着必须有一个主函数。分布式

最多只能有一个main函数,这意味着程序的入口是惟一的。函数

语法格式有特定要求,书写形式也相对固定。

为何必须强制main函数做为入口?

这些语言都是编译语言,须要将代码编译成可执行的二进制文件。为了让操做系统/引导程序找到程序的开头,须要定义这样一个函数。

简而言之,须要在大量可执行的代码中定义一个相当重要的的开头。

不难看出,对于这些语言来讲,main函数是不可或缺的组成部分。

可是,当咱们把目光转向Python时,就会发现状况大不相同。

Python是一种解释语言,即脚本语言。运行过程是从上到下,逐行进行的,这意味着它的起点是已知的。

每一个.py文件都是一个可执行文件,可做为整个程序的入口文件,意味着该程序的入口很灵活,并且无需遵循任何约定。

有时运行Python项目时不须要有指定入口文件(命令行比较常见,例如“ python -m http.server 8000”),多是由于该项目中有main.py文件,在软件包中做为“文件”来执行。

总而言之,Python做为脚本语言不一样于编译语言。不管是单个模块(即.py文件),仍是由多个模块组成的软件包,Python均可以选择一种灵活的执行方法,这彻底不像其余语言那样必须定义入口。

换句话说,Python不须要规定程序员必须在语法上定义一个统一的入口(不管是函数、类仍是其余东西)。

有些学生可能会感到困惑,由于他们常常看到或编写如下代码:

main file
def main():

……

if name == '__main__':

main()

这不就是Python的main函数吗?相信不少人都这么认为!

不,并非。

除了函数名是“main”以外,这段代码与咱们前面介绍的main函数没有半点关系,这个函数既不是必须的,也不能肯定程序的执行顺序。即使没有上面这样的main函数,也不会有任何的语法问题。

人们想编写一个main函数的主要缘由实际上是为了强调这是一个主函数,但愿人为地将其设置成第一个执行的函数。

他们可能认为这个名字的函数更容易记住。
他们之因此要编写__name__ =='__main__',多是由于想代表main()只在直接执行当前脚本时才运行,而在将其导入到其余模块时不要运行。

可是,我我的不推荐这种写法。

举一个简单的例子,假设只有几十行代码,或者一个脚本文件实现了一个简单的功能(一个爬虫,或画一只乌龟,等等),但都是按照前面的方式编写的。

不推荐if name == '__main__'的写法,由于:

首先,若是只有一个文件的话,那么这个文件不可能被导出。

其次,若是有多个文件,强烈建议不要将这个语句写在入口文件(main.py)中。从理论上讲,它的内容不该该导出供其余模块使用,由于它是起点。

最后,在多个文件的状况下,也不建议在非入口的文件中写入这条语句,由于这条语句能作的最多也就是编写一些测试代码。即使如此,测试代码也应分开写到专用目录或文件中。

每次看到这些笨拙的代码时,我都会感到不适。为何要写这样的if语句?你压根不该该将这段代码包装成一个函数!

总结

打破惯性思惟,编写真实的代码。main函数是某些语言的惟一入口,但不该在Python中使用。你应该了解脚本语言的特征,并学习简单而优雅的风格。

你可使用main.py,而不是编写main函数。因为Python程序的执行单元是脚本文件,而不是函数或类,所以建议将入口文件命名为main.py,并根据须要决定内部的函数。

将main.py做为入口文件。该文件可直接与命令行的“-m”参数结合使用。

※部分文章来源于网络,若有侵权请联系删除;更多文章和资料|点击后方文字直达 ↓↓↓
100GPython自学资料包
阿里云K8s实战手册
[阿里云CDN排坑指南] CDN
ECS运维指南
DevOps实践手册
Hadoop大数据实战手册
Knative云原生应用开发指南
OSS 运维实战手册
云原生架构白皮书
Zabbix企业级分布式监控系统源码文档
10G大厂面试题戳领
相关文章
相关标签/搜索