为什么Python没有main函数?
作者 | 豌豆花下猫
来源 | Python猫(ID:python_cat)
众所周知,Python中没有所谓的main函数,但是网上经常有文章提到“ Python的main函数”和“建议编写main函数”。
其实,可能他们是想模仿真正的main函数,但是许多人都被误导(或误解),然后编写了非常笨拙的代码。
在本文中,我们来讨论一下为什么Python没有main函数。
在开始讨论之前,我们先来回答以下两个问题:
所谓的“main函数”究竟是什么意思?
为什么有些编程语言必须编写main函数?
一些编程语言将main函数作为程序的执行入口,比如C/C++、C#、Java、Go、Rust等等,这个函数具有特定的含义:
main函数名是必须的,这意味着必须有一个主函数。
最多只能有一个main函数,这意味着程序的入口是唯一的。
语法格式有特定要求,书写形式也相对固定。
为什么必须强制main函数作为入口?
这些语言都是编译语言,需要将代码编译成可执行的二进制文件。为了让操作系统/引导程序找到程序的开头,需要定义这样一个函数。
简而言之,需要在大量可执行的代码中定义一个至关重要的的开头。
不难看出,对于这些语言来说,main函数是不可或缺的组成部分。
但是,当我们把目光转向Python时,就会发现情况大不相同。
Python是一种解释语言,即脚本语言。运行过程是从上到下,逐行进行的,这意味着它的起点是已知的。
每个.py文件都是一个可执行文件,可作为整个程序的入口文件,意味着该程序的入口很灵活,而且无需遵循任何约定。
有时运行Python项目时不需要有指定入口文件(命令行比较常见,例如“ python -m http.server 8000”),可能是因为该项目中有main.py文件,在软件包中作为“文件”来执行。
总而言之,Python作为脚本语言不同于编译语言。无论是单个模块(即.py文件),还是由多个模块组成的软件包,Python都可以选择一种灵活的执行方法,这完全不像其他语言那样必须定义入口。
换句话说,Python不需要规定程序员必须在语法上定义一个统一的入口(无论是函数、类还是其他东西)。
有些学生可能会感到困惑,因为他们经常看到或编写以下代码:
# main filedef main(): ……if __name__ == '__main__': main()
这不就是Python的main函数吗?相信很多人都这么认为!
不,并不是。
除了函数名是“main”之外,这段代码与我们前面介绍的main函数没有半点关系,这个函数既不是必须的,也不能确定程序的执行顺序。即便没有上面这样的main函数,也不会有任何的语法问题。
人们想编写一个main函数的主要原因其实是为了强调这是一个主函数,希望人为地将其设置成第一个执行的函数。
他们可能认为这个名字的函数更容易记住。
他们之所以要编写__name__ =='__main__',可能是因为想表明main()只在直接执行当前脚本时才运行,而在将其导入到其他模块时不要运行。
但是,我个人不推荐这种写法。
举一个简单的例子,假设只有几十行代码,或者一个脚本文件实现了一个简单的功能(一个爬虫,或画一只乌龟,等等),但都是按照前面的方式编写的。
不推荐if __name__ == '__main__'的写法,因为:
首先,如果只有一个文件的话,那么这个文件不可能被导出。
其次,如果有多个文件,强烈建议不要将这个语句写在入口文件(main.py)中。从理论上讲,它的内容不应该导出供其他模块使用,因为它是起点。
最后,在多个文件的情况下,也不建议在非入口的文件中写入这条语句,因为这条语句能做的最多也就是编写一些测试代码。即便如此,测试代码也应分开写到专用目录或文件中。
每次看到这些笨拙的代码时,我都会感到不适。为什么要写这样的if语句?你压根不应该将这段代码包装成一个函数!
总结
打破惯性思维,编写真实的代码。main函数是某些语言的唯一入口,但不应在Python中使用。你应该了解脚本语言的特征,并学习简单而优雅的风格。
你可以使用main.py,而不是编写main函数。由于Python程序的执行单元是脚本文件,而不是函数或类,因此建议将入口文件命名为main.py,并根据需要决定内部的函数。
将main.py作为入口文件。该文件可直接与命令行的“-m”参数结合使用。
推荐阅读
认知智能,AI的下一个十年 | AI Procon 202
台积电9月14日断供华为:中国“芯”的坎坷之路
2020 美国大选在即,又到了 AI 花式打击假新闻的季节
业界首发|云原生领域首本架构白皮书重磅发布
观点 | 以太坊客户端多样性问题从何而来?
点分享点点赞点在看
为什么Python没有main函数?相关推荐
- 为什么 Python 没有 main 函数?
作者 | 豌豆花下猫 来源 | Python猫(ID:python_cat) 众所周知,Python中没有所谓的main函数,但是网上经常有文章提到" Python的main函数" ...
- python 中main函数总结
Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数. 每个文件(模块)都可以任意写一些没有缩进的代码 ...
- python没有main函数的概念吗_为什么Python没有main函数?
作者 | 豌豆花下猫 来源 | Python猫(ID:python_cat) 众所周知,Python中没有所谓的main函数,但是网上经常有文章提到" Python的main函数" ...
- python没有main函数也可以_为什么Python没有main函数?,
为什么Python没有main函数?, 我为什么也不推荐 毫无疑问,Python中没有所谓的主入口函数,但是互联网上经常有文章提到" Python的Main函数"和"建议 ...
- python强制结束函数_为什么Python没有 main 函数?终于有人给出了正确答案!
毫无疑问,Python中没有所谓的 main 入口函数,但在网上经常有文章提到"Python中的main函数"和"建议编写main函数"等. 他们的目的可能是模 ...
- 【Python】main函数 if __name__=='__main__' 详解
引言 我们先看下各个编程语言的代码框架输出Hello,World C #include <stdio.h> int main() {printf("Hello, World! \ ...
- python中main函数在运行中不是必须要写的_Python必备知识之“if __name__ == '__main__':”...
在学习Python的过程中经常会看到"if __name__ == '__main__':"这行代码,那么这行代码的作用究竟是什么呢? "if __name__ == ' ...
- python def main return,python中main()函数写法
顶顶大名的Guido van Rossum(Python之父)推荐的main写法: #!/usr/bin/python import sys import getopt class Usage(Exc ...
- python中main()函数写法
顶顶大名的Guido van Rossum(Python之父)推荐的main写法: import sys import getoptclass Usage(Exception):def __init_ ...
最新文章
- 在echarts中自定义提示框内容
- 秒懂边缘云 | 边缘云技术进阶
- 如何快速理解递归——蓝桥杯 试题 基础练习 FJ的字符串(递归与非递归解法)——10行代码AC
- tar包在linux下 java安装
- C++11新特性之std::bind()
- Fragment+ViewPager+ButterKnife时控件会报空指针问题
- JAVA生成32位随机字符串工具
- 信号与系统(十七)—— 傅里叶变换及性质(1)常用函数的傅里叶变换
- DynamipsGUI使用入门
- MVP模式——Okhttp实现下载图片并带有进度 【Android Demo】
- FAL风控策略分析师怎么样?
- 软件测试面试题(等待解答)
- JAVA多线程并发之线程实现,4种线程池,终止线程4种方式
- 制作简单的指纹图集,并对其进行处理
- [NOIP模拟测试34]反思+题解
- 秋天,小溪潺潺,古老的树上黄叶灿灿,阳光像一个魔法师,在树叶间流动,远山,云天,充满秋阳的光线。以此景观做一首诗...
- Powershell之MOF后门
- FastDB 应用开发指南(一)
- Sketchfab下载器ArtStation资源下载操作说明中文网模型提取教程
- DVWA之反射型XSS代码审计