当前位置: 首页 > 后端技术 > Python

为什么Python没有main函数?为什么我不推荐写主函数?

时间:2023-03-26 15:09:45 Python

毫无疑问,Python中没有所谓的main入口函数,但是我经常看到网上一些文章提到“Python的main函数”和“推荐写main函数”……有人是见多识广,他的本意可能是模仿那些正宗的main函数,但是还是有很多人明显被误导了(或者自己误会了),所以写出非常繁琐的代码。本期《WhyPython》专栏,我们来聊聊为什么Python没有main函数?在开始正题之前,我们首先要回答这两个问题:所谓的“main函数”是什么?为什么有的编程语言需要写一个main函数?有些编程语言将main函数作为程序的执行入口,如C/C++、C#、Java、Go和Rust等,具有特定的含义:main函数的名称是强制性的,即,必须有一个main函数mainfunction最多只能有一个,也就是说程序的入口是唯一的。语法格式有一定的要求,有一个比较固定的模板。为什么必须要有一个主入口函数?这些语言都是编译型语言,需要将代码编译成可执行的二进制文件。为了让操作系统/启动器找到程序的起点,必须同意此功能。简单的说,在一大堆代码中,需要定义一个突出的开头,可以用来执行。不难看出,main函数是那些语言不可或缺的重要有机组成部分。然而,当我们再看Python时,情况就大不一样了。Python是一种解释型语言,即脚本语言。运行过程是从上到下,逐行解析运行,也就是说它的起点是已知的。每个.py文件都是一个可执行文件,可以作为整个程序文件的入口,也就是说,程序的入口是灵活多变的,没有必须遵守的约定。有时Python项目运行时没有指定入口文件(常见于命令行,如"python-mhttp。可能是有__main__.py文件,它所在的包作为"文件执行".py文件),或者在由多个模块组成的包级别,可以选择灵活的执行方式,不像其他语言没有约定的入口就无法执行。也就是说,Python不需要在语法层面规定程序员必须定义一个统一的入口点(不管是函数还是类什么的)。可能有的同学会有疑惑,因为他们经常看到或者写出如下代码:#main是一些主体代码defmain():...if__name__=='__main__':main()这不就是main吗Python的功能?相信很多同学都会这么想!不!不!除了函数名是“main”外,与我们前面介绍的正统的main函数没有任何关系。它既不是强制性的,也不一定决定程序执行的顺序。它的缺失不会导致语法问题。一些业内人士之所以要命名一个“main”函数,其实是为了强调它的“main”地位,人为地将其安排为最先执行的函数。他们可能认为这样命名的函数更容易记住。之所以有业内人士要写ifname=='__main__'可能是想说明main()只在当前脚本直接执行时运行,不想在导入其他模块时运行。对于这些“圈内人”来说,他们有一定的道理。不过,我个人并不推荐这种写法,有时甚至很反感!最明显的例子:代码只有几十行,或者只有一个脚本文件,实现了一个简单的功能(一小段爬虫,用乌龟画图等),但是都是按照以前的风格。每次看到这种没脑子的繁琐代码,心里都不舒服。为什么要写那一行if语句呢?如果可能的话,应该将主函数拆分,甚至不要封装成一个函数!我个人总结了以下经验:打破惯性思维,写出地道的代码。主入口函数是某些语言特有的。你不应该在Python中“跟猫画虎”。你应该了解脚本语言的特点,用main.py而不是main()写出简洁优雅的风格。因为Python的程序执行单元其实是一个脚本文件,而不是某个函数或者类,所以建议将入口文件命名为main.py。如果可以根据需求确定内部函数,则使用__main__.py作为入口文件。该文件与命令行上的“-m”参数结合使用非常容易。不推荐写ifname=='__main__'。首先,如果只有一个文件,不建议写,因为没有导出的可能。其次,当有多个文件时,不建议在入口文件(main.py)中写这句话。这个文件的代码逻辑要细化,理论上不应该把它的内容导出到其他模块,因为它是起点!最后,不建议写多文件的非入口文件,因为把这个判断写在非入口文件中最大的作用就是写一些测试代码,但是测试代码要分开写到专门的目录或文件中.总结:本文先解释一下什么是main入口函数,以及为什么有些语言会强制写main函数;然后,解释了为什么Python不需要写main函数;最后,针对一些人的惯性误解,分享一下我个人的四点编程心得。以上就是本次分享的全部内容。想了解更多python知识,请前往公众号:Python编程学习圈,发“J”免费领取,每日干货分享