天涯论坛

 找回密码
 立即注册
搜索
查看: 53|回复: 2

Python 为么无 main 函数?为么我不举荐写 main 函数?

[复制链接]

3138

主题

3万

回帖

9996万

积分

论坛元老

Rank: 8Rank: 8

积分
99968624
发表于 2024-8-17 08:25:16 | 显示全部楼层 |阅读模式

毫无疑问 Python 中所说的 main 入口函数,然则网上经常看到有些文案提“Python 的 main 函数”、“意见写 main 函数”……

有些人是知情的,他的意图可能是模仿哪些正宗的 main 函数,但还有不少人显著是被误导了(或自己误解了),就写出来很负担的代码。

本期“Python 为何”栏目来聊聊Python 为何 main 函数?

起始正题之前,先要来回答这两个问题:所说的 “main 函数”指的是什么?为何有些编程语言必须强制写一个 main 函数?

某些编程语言以 main 函数做为程序的执行入口,例如 C/C++、C#、 Java、Go 和 Rust 等,它们具有特定的含义:

main 函数名是强制的,便是需求必要有一个 main 函数main 函数最多只能有一个,便是说程序的入口是独一的语法格式有必定需求拥有相对固定的模板

为何要强制一个 main 入口函数呢?

这些语言是编译型语言,必须把代码编译成可执行的二进制文件,为了让操作系统/起步器找到程序的起点,因此要约定这一个函数。简单地说,便是在一大堆代码里,必须定义一个明显的可用于执行的开头。

不难看出,main 函数是哪些语言中重要而不可缺的有机构成部分。

然而,咱们再来瞧瞧 Python,状况就大不相同了。

Python 是解释型语言,即脚本语言,运行过程是从上往下,逐行解析运行,便是说它的起点是可知的每一个 .py 文件便是一个可执行文件,都可做为全部程序的入口文件,便是说程序的入口是灵活可变的,必要遵守的约定有时候运行 Python 项目,并指定入口文件(命令行中较平常,例如"python -m http.server 8000"), 那可能是存在main.py 文件,它所在的包被当成一个“文件”来执行了

归结起来,意思是说 Python 这种脚本语言跟编译型语言区别,它不管是在单个模块层面(即一个 .py 文件),还是在由多个模块构成的包层面,都可选取灵活的执行方式,不像其它语言缺了约定好的入口就没法执行。

便是说,Python 必要在语法层面规定程序员必要定义出一个统一的入口(不管是函数还是类还是什么东西)。

有些朋友可能会有疑惑,由于她们经常看到自己写出下面这般的代码:

# main 里是某些主体代码 def main():     ……  if __name__ == __main__:     main()

难道这不便是 Python 的 main 函数么?相信有不少朋友会这么想!

!非

除了函数名是“main”以外,它跟咱们前面介绍的正统的 main 函数半毛钱关系,既强制性,必然决定程序执行次序功效。缺少它,不会引起什么语法问题。

因此有些知情人要命名出一个”main“函数,其实是想强调它的”重点“地位,想要人为地安排它做为第1个执行的函数。她们可能认为这般命名的函数,比较容易记忆。

因此有些知情人要写if __name__ == __main__ ,可能想显示 main() 仅有在当前脚本被直接执行时才运行,不期盼被导入其它模块时运行。

针对这些“知情人”,她们必定的道理。

然则,我个人并不举荐这种写法,乃至有时候会非常反感!

最明显的例子:明明仅有几十行代码,仅有一个脚本文件,实现一个简单的功能(一小段爬虫、用 turtle 画张图等等),然则它们都按前面的样式写了。

我每次看到这种不假思索的负担代码,就觉得难受。为何要写那行 if 语句呢?可能的话,应该拆分 main 函数,乃至不必封装成一个函数啊!

我个人总结出以下的经验:

打破惯性思维,写出地道的代码。main 入口函数是某些语言特有的,不应在 Python 中“照猫画虎”,应该认识脚本语言的特点,写出简洁优雅的风格运用 main.py 而非 main()。由于 Python 的程序执行单位其实是脚本文件,而非某个函数类,因此意见把入口文件命名为 main.py,内部的函数按需求而定能够的话,运用main.py 做为入口文件。这个文件结合命令行的“-m”参数运用,非常好用。举荐阅读:Python 中 -m 的典型用法、原理解析与发展演变不举荐写if name__ == __main首要倘若仅有一个文件的话,由于不存在导出的可能,不意见写。其次,存在多文件时,入口文件(main.py)中极不举荐写这一句,此文件的代码规律应该精炼,理论上其内容不应被导出到其它模块运用由于它是起点!最后,多文件的非入口文件意见写,由于在非入口文件中写这个判断,最大的功效便是有些测试代码,然则测试代码应该分离出来,写到专门的目录或文件中。

小结:本文首要解释了什么是 main 入口函数,以及为何某些语言会强制需求写 main 函数;接着,解释了为何 Python 不必须写 main 函数;最后则是针对某些人存在的惯性误区,分享了我个人的四点编程经验。

本文属于“Python为何”系列文案(Python猫出品),该系列重点关注 Python 的语法、设计和发展等专题,以一个个“为何”式的问题为切入点,试着展现 Python 的迷人魅力。部分专题会推出视频版,请在 B 站收看,观看位置

https://space.bilibili.com/97566624/video

公众号【Python猫】, 本号连载优秀的系列文案,有Python为何系列、喵星哲学猫系列、Python进阶系列、好书举荐系列、技术写作、优秀英文举荐与翻译等等,欢迎关注哦。





上一篇:小白科普:Python代码是编译执行还是解释执行?
下一篇:留学语言成绩的重要性高吗?
回复

使用道具 举报

7

主题

654

回帖

198

积分

注册会员

Rank: 2

积分
198
发表于 2024-9-10 01:01:36 | 显示全部楼层
谷歌网站排名优化 http://www.fok120.com/
回复

使用道具 举报

22

主题

876

回帖

898

积分

高级会员

Rank: 4

积分
898
发表于 2024-9-24 16:47:03 | 显示全部楼层
谢谢、感谢、感恩、辛苦了、有你真好等。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 10:52 , Processed in 0.117117 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.