百科狗-知识改变命运!
--

为什么Python没有main函数?

是丫丫呀1年前 (2023-11-21)阅读数 23#技术干货
文章标签函数

毫无疑问,Python中没有所谓的主入口函数,但是互联网上经常有文章提到"Python的Main函数"和"建议编写Main函数"。

他们的目的可能是模仿真实的主要功能,但是许多人被误导(或误解)并编写了非常繁琐的代码。

在"为什么使用Python"系列的这个故事中,我们将讨论为什么Python不具有main函数?最后,您将获得本系列前两个故事的链接。

在开始主题之前,让我们回答以下两个问题:

·所谓的"Main函数"是什么意思?

·为什么有些编程语言需要强制编写Main函数?

为什么Python没有main函数?

一些编程语言将主要功能用作程序的执行入口,例如C/C++,C#,Java,Go,Rust等,它们具有特定含义:

·此主要功能名称是强制性的,这意味着必须有一个main函数。

·最多可以有一个主要功能,这意味着该程序的条目是唯一的。

·格式有特定要求,带有相对固定的模板。

为什么必须强制执行主函数?

这些语言是已编译的语言,需要将代码编译到可执行的二进制文件中,以便操作系统/引导程序找到程序的开始,因此需要定义此功能。

简而言之,需要在大量可用于执行的代码中定义一个重要的开始。

不难看出,主函数是这些语言不可或缺的有机组成部分。

但是,当我们再次查看Python时,情况就大不相同了。

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

·有时在运行Python项目时,未指定入口文件(在命令行中较为常见,例如"python-mhttp.server8000"),它可能是main.pya文件的存在,它在软件包中以"文件"来执行

总之,这意味着脚本语言Python与编译语言不同。无论是在单个模块级别(即.py文件),还是在由多个模块组成的包级别,它都可以选择一种灵活的执行方法,这与其他语言不同定义的条目。

换句话说,Python不需要规定程序员必须在语法级别定义一个统一的条目(无论是函数,类还是其他东西)。

一些学生可能会感到困惑,因为他们经常自己查看或编写以下代码:

#mainfiledefmain():

……

if__name__=='__main__':

main()

这不是Python的main函数吗?相信我们很多人都这么认为!

不,这不对

除了函数名是"main"之外,它与我们前面介绍的正统main函数没有半分的关系,不是强制性的,也不一定确定程序执行的顺序。没有它,就不会引起任何语法问题。

有些人想命名"main"函数的原因实际上是为了强调其"主入口"状态,并希望将其安排为人为执行的第一个功能。

他们可能认为这样的命名函数更容易记住。

他们之所以要编写__name__=='main'的原因,可能是想表明main()仅在直接执行当前脚本时才运行,而在将其导入其他模块时不希望运行。

但是,我个人不推荐这种书写方式

最明显的例子:只有几十行代码或一个脚本文件实现了一个简单的功能(一个小的搜寻器,用乌龟画一幅画等),但是它们都是用相同的样式编写的像之前一样。

·如果name__=='__main',不建议写

·首先,如果只有一个文件,因为不可能导出。

·其次,如果有多个文件,强烈建议不要将此句子写在入口文件(main.py)中。从理论上讲,因为它是起点,所以不应导出其内容以供其他模块使用。

·最后,也不建议在具有多个文件的非进入文件中写入此判断,因为最多可以做的就是编写其中一些测试代码。尽管如此,测试代码仍应分开并写在专用目录或文件中。

每当我不经思考就看到这些繁琐的代码时,都会感到不舒服。为什么要写该if语句?如果可能的话,您应该拆分主函数,甚至不将其包装为一个函数!

总结一下

·打破惯性思维并编写真实的代码。主输入函数对于某些语言是唯一的,不应在Python中使用。您应该了解脚本语言的特征,并编写简单而优雅的样式。

·使用main.py而不是main()。由于Python的程序执行单元是脚本文件,而不是函数或类,因此建议将入口文件命名为main.py,并根据需要确定内部函数。

·如果可能,将main.py用作入口文件。该文件可直接与命令行上的"-m"参数结合使用。

以上内容为大家介绍了为什么Python没有main函数?希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:开发教育。http://www.baikegou.com/


鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)