python强制结束函数_为什么Python没有 main 函数?终于有人给出了正确答案!

d825dab376dfa4e5ba2fe9379b003835.png

毫无疑问,Python中没有所谓的 main 入口函数,但在网上经常有文章提到“Python中的main函数”和“建议编写main函数”等。

他们的目的可能是模仿真实的 main 函数,但是经常有很多人被误导(或误解)并编写非常繁琐的代码。

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

  • 所谓“ main 函数”是什么意思?
  • 为什么有些编程语言需要强制编写一个 main 函数?

一些编程语言使用 main 函数作为程序的执行入口,如C/C++、C语言、java、GO、RIST等,这些语言具有特定的含义:

  • 这个 main 函数名是必需的,这意味着必须有一个 main 函数。
  • 最多只能有一个 main 函数,这意味着程序的条目是唯一的。
  • 语法格式有特定要求,带有相对固定的模板。

253c77ac787cd5a2ad3a905ecc5b80e0.png

为什么要强制使用 main 入口函数?

这些语言是编译语言,需要将代码编译成可执行的二进制文件,以便操作系统引导加载程序找到程序的开头,因此需要定义这一个函数。

简单地说,有一个重要的开始需要定义在一大堆可以用于执行的代码中。

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

但是,当我们再次审视Python时,情况就完全不同了。

  • Python是一种解释语言,即脚本语言。运行过程是自上而下,逐行进行的,这意味着它的起点是已知的。
  • py 文件是一个可执行文件,可以作为整个程序的入口文件,这意味着程序的入口是灵活的,不必遵循任何约定
  • 有时候,我们运行Python项目时,没有指定入口文件(命令行比较常见,如“python -m http.server 8000”),可能是 main.py 文件,它在包中作为“文件”执行。

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

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

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

# main file
def main():……
if __name__ == '__main__':main()

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

不是!

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

有些人想命名“main”函数的原因实际上是为了强调其“main”地位,想将其安排为人为执行的第一个函数。

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

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

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

最明显的例子是:只有几十行代码或者只是一个脚本文件实现了一个简单的功能(一个小爬虫,用乌龟画一幅画等等),而且它们都是用与过去相同的样式来编写的。

建议不要在 name__ =='__main' 时写入:

  • 首先,如果只有一个文件,因为没有导出的可能。
  • 其次,如果有多个文件,强烈建议不要在入口文件(main.py)中写这句话。从理论上讲,因为它是起点,所以不应导出其内容以供其他模块使用。
  • 最后,也不建议在具有多个文件的非进入文件中写入此判断,因为最多可以做的就是编写其中一些测试代码。尽管如此,测试代码仍应分开并写在专用目录或文件中。

每当我不经意间看到这些繁琐的代码时,都会感到不舒服。为什么要写这个 if 语句?如果可能的话,你应该拆分 main 函数,甚至不要把它包装成一个函数!

总结

  • 打破惯性思维,写出真实的代码。main 入口函数对于某些语言是唯一的,但是不应该在Python中进行使用。你应该了解脚本语言的特点,写出简单优雅的代码风格。
  • 使用 main.py 而不是 main()。因为Python的程序执行单元是一个脚本文件,而不是函数或类,因此建议命名入口文件 main.py,并根据需要确定内部函数。
  • 如果可能,使用 main.py 作为入口文件。该文件可以直接与命令行上的“-m”参数结合使用。

--END--

PS.本文是豌豆花下猫的文章,他的公众号是:Python猫(python_cat),大家可以去关注这个Python大牛哈~

喜欢本文的同学记得转发+点赞~

更多内容,欢迎大家关注我们的公众号:为AI呐喊(weainahan)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacOS 如何显示/隐藏文件

文章目录显示/隐藏文件快捷键修改“访达”属性修改文件隐藏属性设置特殊文件名实现隐藏使用命令设置文件隐藏属性显示/隐藏文件 快捷键 按下 Shift Command . 可以显示隐藏型的文件,再按下 Shift Command . 则不显示隐藏型的文件 修改“访达”属性 defaults…

不相关子查询的工作方式是_课题组工作|Nucleic Acids Research|基于表达密度谱的特征子空间分离及相关单细胞转录组分群新算法...

大家好!为大家分享本课题组近期发表在Nucleic Acids Research的文章,题目为 “Entropy subspace separation-based clustering for noise reduction (ENCORE) of scRNA-seq data”,文章提出了一种基于表达密度谱的特征选择方法,能…

java 9 module_Java 9:欢迎来到Module World

java 9 moduleJava 9已于9月21日正式发布,Eclipse从Eclipse Oxygen.1a(4.7.1a)支持Java 9,让我们进入模块世界。 从此处下载Java 9,并将其添加到Eclipse Installed JRE中,如下所示 就是这样,…

Mac OS 通过配置窗口来连接远程主机

点击连接后,就跳到命令终端窗口中,输入远程主机 root 用户的登录密码,则完成连接。

温度补偿计算公式_一种工业用温度测量模块的设计与实现

一种工业用温度测量模块的设计与实现罗伯特侯0 引言温度是工业生产中最重要的参数之一,因此温度测量设备在工业领域不可或缺。热电偶是工业场合中应用最广泛的温度传感器,它的主要特点是测温范围宽,价格低,同时结构简单,坚固耐用。笔者采用高集成度、高精…

微博如何发订阅消息_微信订阅号或将大变天,微博8年前就这么干了...

近日,微信又偷偷的做了一个大胆的尝试,将公众号消息排序改版,不再按照一直以来的“时间轴展示”,而是学起了微博,变成了“智能排序”。微信的“阅读效率优化”排序不过可能是为了独树一帜,微信管这种排序方…

indesign如何画弧线_彩铅画入门教程,如何给独角兽设计一款好发型

戳这里 → 查看“爱蜜干货文章目录”本次综合训练的目的1.挖掘你的绘画感和想象力,彩色鬃毛色彩大家可以自由发挥哦!2.练习彩铅的长线条,现在练习的长条还是比较简单的,下次综合训练我们还会练习更加复杂的3.彩铅这种画…

微型计算机作为载体的部件是,大工11秋《计算机应用基础》辅导资料二

计算机应用基础辅导资料二主题:计算机基础知识的辅导资料学习时间:2011年10月10日-10月16日内容:这周我们主要学习课件..第二章计算机的基础知识,本章的学习要求及需要掌握的重点内容如下&#…

markdown如何设置图片大小_Gitee(码云)实现免费 Markdown 图床

“阅读本文大概需要 6 分钟前言Markdown是一种易于上手的轻量级标记语言,由于其目的在于注重文字内容而不是排版,目前很受大家欢迎,写完一篇文档可以直接复制到其他各大平台上,不用担心格式字体等混乱问题但是文章中如果引用了某个…

适合利用计算机模拟的是,计算机模拟在数学建模中的应用

计算机模拟在数学建模中的应用计算机模拟是按时间来划分的,因为计算机模拟实质上是系统随时间变化而变化的动态写照,以下是小编搜集整理的一篇探究计算机模拟在数学建模应用的论文范文,供大家阅读参考。【摘要】本文主要阐述了如何利用计算机…

噪音声压和声功率的区别_南昌汽车隔音,深入了解汽车噪音的来源、危害以及解决方案...

汽车噪音带来的危害:汽车噪音对人体健康的影响是多方面的。噪音作用于人的中枢神经系统,使人们大脑皮层的兴奋与抑制平衡失调,导致条件反射异常,使脑血管张力遭到损害。这些生理上的变化,在早期能够恢复原状&#xff0…

lua加密教程_我们相信加密! 教程

lua加密教程许多人认为加密是一个复杂的主题,这很难理解。 可以实现其某些方面,但是每个人都可以理解它在更高层次上的工作方式。 这就是我要处理的这篇文章。 用简单的术语解释它是如何工作的,然后使用一些代码。 是的,我们信任…

生产用计算机软件管理台账,计算机台账管理系统

计算机台账管理系统计算机台账管理系统是什么?什么是计算机台账管理系统?对于设备管理而言,设备台账是其重要的组成部分,计算机台账管理系统对设备的编号、适用规格、年限、使用部门等具体信息进行管理,方便设备资产的…

fcpx怎么合成延时摄影_延时摄影合成终极后期教程

原来常见的延时摄影,一般都是软件生成或视频加速实现,这种方法简单快捷,但是后期处理空间小,画质差。现在追求高画质都会采用拍摄照片,后期合成,索尼等相机型号,自带有间隔拍摄功能,…

计算机网络的拓扑模型,基于复杂网络模型的计算机网络拓扑结构研究

一篇基于复杂网络模型的计算机网络拓扑结构研究论文第卷期第年月计算机科学基于复杂网络模型的计算机网络拓扑结构研究杜彩凤中国石油大学摘,东营,要,随着计算机网络的快速发展网络结构日益复杂传统的随机网络模型已很难对其拓扑特性作出客观的描,.述因此复杂网络理论为计算机网…

交华为换机access配置_华为交换机VLAN内Proxy ARP配置示例

华为交换机VLAN内Proxy ARP配置示例1、组网需求图1 VLAN内Proxy ARP组网示例图如上图1所示,Switch的接口GE1/0/2和GE1/0/1属于同一个sub-VLAN2。该sub-VLAN属于super-VLAN3。要求:属于同一VLAN2的两台主机hostA和hostB之间二层隔离。hostA和hostB之间通过…

java中regex_Java 9中的新Regex功能

java中regex最近,我收到了Packt出版的Anubhava Srivastava提供的免费书籍“ Java 9 Regular Expressions” 。 这本书是一个很好的教程,它向想要学习正则表达式并从头开始的任何人介绍。 那些知道如何使用正则表达式的人可能仍然很有趣,以重申…

如何将本地 Windows 电脑中的文件复制(上传)到远程的 Windows 服务器主机上

文章目录第一步:点击「远程桌面连接」第二步:输入远程主机 IP 和 port第三步:设置本地目录共享第四步:点击「连接」按钮,输入登录用户名和密码第五步:复制本地文件到远程主机上第一步:点击「远程…

股票实例_注意了!手中的股票涨停,但是却封不住反复打开,说明了什么?看懂持股不慌...

手中的股票涨停,却封不住反复打开,说明了什么?如果一只股票收到涨停板但封不牢,说明在涨停位反复打开,而且成交比较大,因为一只股票出现涨停的时候,一般会有大量的买单排除在买位的位置封住涨停&#xff0…

vue设置标签自定义属性_Vue组件化开发之插槽

插槽为组件提供了强大的扩展能力。我们可以把电脑的主板理解为一个已经封装好的组件,主板上都会预留各种插槽,我们可以往插槽中插入内存条、显卡、声卡等设备。基于同样的思想,Vue在封装组件时,也可以预留插槽,在组件被…