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

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

时间:2023-03-26 16:02:54 Python

为什么Python没有main函数?为什么我不推荐写主函数?毫无疑问,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”地位,人为地将其安排为最先执行的函数。他们可能认为这样命名的函数更容易记住。之所以有业内人士要写if__name__=='__main__'可能是想说明main()只在当前脚本直接执行时运行,不想在导入其他模块时运行。对于这些“圈内人”来说,他们有一定的道理。不过,我个人并不推荐这种写法,有时甚至很反感!最明显的例子:代码只有几十行,或者只有一个脚本文件,实现了一个简单的功能(一小段爬虫,用乌龟画图等),但是都是按照以前的风格。每次看到这种没脑子的繁琐代码,心里都不舒服。为什么要写那一行if语句呢?如果可能的话,应该将主函数拆分,甚至不要封装成一个函数!我个人总结了以下经验:打破惯性思维,写出地道的代码。主入口函数是某些语言特有的。你不应该在Python中“跟猫画虎”。你应该了解脚本语言的特点,用main.py而不是main()写出简洁优雅的风格。因为Python的程序执行单元其实是一个脚本文件,而不是某个函数或者类,所以建议将入口文件命名为main.py。如果可以根据需求确定内部函数,则使用__main__.py作为入口文件。该文件与命令行上的“-m”参数结合使用非常容易。推荐阅读:Python中-m的典型用法、原理分析及发展演进不建议写if__name__=='__main__'。首先,如果只有一个文件,不建议写,因为没有导出的可能。其次,当有多个文件时,不建议在入口文件(main.py)中写这句话。这个文件的代码逻辑要细化,理论上不应该把它的内容导出到其他模块,因为它是起点!最后,不建议写多文件的非入口文件,因为把这个判断写在非入口文件中最大的作用就是写一些测试代码,但是测试代码要分开写到专门的目录或文件中.总结:本文先解释一下什么是main入口函数,以及为什么有些语言会强制写main函数;然后,解释了为什么Python不需要写main函数;最后,针对一些人的惯性误解,分享一下我个人的四点编程心得。本文属于“WhyPython”系列文章(Python猫出品)。本系列主要关注Python的语法、设计和开发等主题。它以“为什么”问题为切入点,试图展示Python的魅力。部分专题会有视频版,请到B站观看,观看地址:视频地址公众号【Python猫】,本号连载优质系列文章,包括WhyPython系列、喵星哲学猫系列、Python进阶系列、好书推荐系列、技术写作、优质英文推荐与翻译等,欢迎关注。