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

Python为什么没有main函数?为什么我不推荐写main函数?
毫⽆疑问 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“函数,其实是想强调它的”主要“地位,想要⼈为地安排它作为第⼀个执⾏的函数。他们可能认为这样命名的函数,⽐较容易记忆。
之所以有些知情⼈要写if __name__ == '__main__' ,可能想表明 main() 只有在当前脚本被直接执⾏时才运⾏,不希望被导⼊其它模块时运⾏。
对于这些“知情⼈”,他们有⼀定的道理。
但是,我个⼈并不推荐这种写法,甚⾄有时候会⾮常反感!
最明显的例⼦:明明只有⼏⼗⾏代码,或者仅有⼀个脚本⽂件,实现⼀个简单的功能(⼀⼩段爬⾍、⽤ turtle 画张图等等),但是它们都按前⾯的样式写了。
我每次看到这种不假思索的累赘代码,就觉得难受。为什么要写那⾏ if 语句呢?可能的话,应该拆分 main 函数,甚⾄不必封装成⼀个函数啊!
我个⼈总结出以下的经验:
凝胶谱法打破惯性思维,写出地道的代码。main ⼊⼝函数是某些语⾔特有的,不该在 Python 中“照猫画虎”,应该了解脚本语⾔的特点,写出简洁优雅的风格
使⽤ main.py ⽽⾮ main()。因为 Python 的程序执⾏单位其实是脚本⽂件,⽽⾮某个函数或者类,所以建议把⼊⼝⽂件命名为 main.py,内部的函数按需求⽽定
可以的话,使⽤__main__.py 作为⼊⼝⽂件。这个⽂件结合命令⾏的“-m”参数使⽤,⾮常好⽤。推荐阅读:
流氓是怎样练成的不推荐写if __name__ == '__main__' 。⾸先,如果只有⼀个⽂件的话,因为不存在导出的可能,不建议写。其次,存在多⽂件时,⼊⼝⽂件(main.py)中极不推荐写这⼀句,此⽂件的代码逻辑应该精炼,理论上其内容不该被导出到其它模块使⽤,因为它是起点!最后,多⽂件的⾮⼊⼝⽂件也不建议写,因为在⾮⼊⼝⽂件中写这个判断,最⼤的作⽤就是写⼀些测试代码,但是测试代码应该分离出来,写到专门的⽬录或⽂件中。
⼩结:本⽂⾸先解释了什么是 main ⼊⼝函数,以及为什么某些语⾔会强制要求写 main 函数;接着,解释了为什么 Python 不需要写 main 函数;最后则是针对某些⼈存在的惯性误区,分享了我个⼈的四点编程经验。
南京市人口与计划生育规定
本⽂属于“Python为什么”系列⽂章(Python猫出品),该系列主要关注 Python 的语法、设计和发展等话题,以⼀个个“为什么”式的问题为切⼊点,试着展现 Python 的迷⼈魅⼒。部分话题会推出视频版,请在 B 站收看,观看地址:
【Python猫】,本号连载优质的系列⽂章,有Python为什么系列、喵星哲学猫系列、Python进阶系列、好书推荐系列、技术写作、优质英⽂推荐与翻译等等,欢迎关注哦。

本文发布于:2024-09-21 16:19:24,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/600191.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   没有   可能   推荐   代码   语法   程序   应该
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议