Python 为么无 main 函数?为么我不举荐写 main 函数?
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">毫无疑问 Python 中<span style="color: black;">无</span><span style="color: black;">所说</span>的 main 入口函数,<span style="color: black;">然则</span>网上经常看到<span style="color: black;">有些</span><span style="color: black;">文案</span>提“Python 的 main 函数”、“<span style="color: black;">意见</span>写 main 函数”……</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">有些人是知情的,他的意图可能是模仿<span style="color: black;">哪些</span>正宗的 main 函数,但还有不少人<span style="color: black;">显著</span>是被误导了(或自己误解了),就写出来很<span style="color: black;">负担</span>的代码。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">本期“Python <span style="color: black;">为何</span>”栏目来聊聊<strong style="color: blue;">Python <span style="color: black;">为何</span><span style="color: black;">无</span> main 函数?</strong></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在<span style="color: black;">起始</span>正题之前,先要来回答这两个问题:<strong style="color: blue;"><span style="color: black;">所说</span>的 “main 函数”<span style="color: black;">指的是</span>什么?<span style="color: black;">为何</span>有些编程语言<span style="color: black;">必须</span>强制写一个 main 函数?</strong></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">某些编程语言以 main 函数<span style="color: black;">做为</span>程序的执行入口,例如 C/C++、C#、 Java、Go 和 Rust 等,它们具有特定的含义:</p>main 函数名是强制的,<span style="color: black;">亦</span><span style="color: black;">便是</span><span style="color: black;">需求</span><span style="color: black;">必要</span>有一个 main 函数main 函数最多只能有一个,<span style="color: black;">亦</span><span style="color: black;">便是</span>说程序的入口是<span style="color: black;">独一</span>的语法格式有<span style="color: black;">必定</span>的<span style="color: black;">需求</span>,<span style="color: black;">拥有</span>相对固定的模板<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">为何</span>要强制一个 main 入口函数呢?</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">这些语言是编译型语言,<span style="color: black;">必须</span>把代码编译成可执行的二进制文件,为了让操作系统/<span style="color: black;">起步</span>器找到程序的起点,<span style="color: black;">因此</span>要约定这一个函数。简单地说,<span style="color: black;">便是</span>在一大堆代码里,<span style="color: black;">必须</span>定义一个<span style="color: black;">明显</span>的可用于执行的开头。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">不难看出,main 函数是<span style="color: black;">哪些</span>语言中重要而不可缺的有机<span style="color: black;">构成</span>部分。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">然而,<span style="color: black;">咱们</span>再来<span style="color: black;">瞧瞧</span> Python,<span style="color: black;">状况</span>就大不相同了。</p>Python 是解释型语言,即脚本语言,运行过程是从上往下,逐行解析运行,<span style="color: black;">亦</span><span style="color: black;">便是</span>说它的起点是可知的<span style="color: black;">每一个</span> .py 文件<span style="color: black;">便是</span>一个可执行文件,都可<span style="color: black;">做为</span><span style="color: black;">全部</span>程序的入口文件,<span style="color: black;">亦</span><span style="color: black;">便是</span>说程序的入口是灵活可变的,<span style="color: black;">无</span><span style="color: black;">必要</span>遵守的约定有时候运行 Python 项目,并<span style="color: black;">无</span>指定入口文件(命令行中较<span style="color: black;">平常</span>,例如"python -m http.server 8000"), 那可能是存在<strong style="color: blue;">main</strong>.py 文件,它所在的包被当成一个“文件”来执行了<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">归结起来,意思是说 Python 这种脚本语言跟编译型语言<span style="color: black;">区别</span>,它不管是在单个模块层面(即一个 .py 文件),还是在由多个模块<span style="color: black;">构成</span>的包层面,都可<span style="color: black;">选取</span>灵活的执行方式,不像其它语言缺了约定好的入口就没法执行。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">亦</span><span style="color: black;">便是</span>说,Python <span style="color: black;">无</span>必要在语法层面规定程序员<span style="color: black;">必要</span>定义出一个统一的入口(不管是函数还是类还是什么东西)。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">有些<span style="color: black;">朋友</span>可能会有疑惑,<span style="color: black;">由于</span><span style="color: black;">她们</span>经常看到<span style="color: black;">或</span>自己写出下面<span style="color: black;">这般</span>的代码:</p><span style="color: black;"># main 里是某些主体代码</span>
<span style="color: black;"><span style="color: black;">def</span> <span style="color: black;">main</span><span style="color: black;">()</span>:</span>
……
<span style="color: black;">if</span> __name__ == <span style="color: black;">__main__</span>:
main()<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">难道这不<span style="color: black;">便是</span> Python 的 main 函数么?相信有不少<span style="color: black;">朋友</span>会这么想!</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">非<span style="color: black;">亦</span>!非<span style="color: black;">亦</span>!</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">除了函数名是“main”以外,它跟<span style="color: black;">咱们</span>前面介绍的正统的 main 函数<span style="color: black;">无</span>半毛钱关系,既<span style="color: black;">无</span>强制性,<span style="color: black;">亦</span><span style="color: black;">无</span>必然决定程序执行<span style="color: black;">次序</span>的<span style="color: black;">功效</span>。缺少它,<span style="color: black;">亦</span>不会<span style="color: black;">引起</span>什么语法问题。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">之<span style="color: black;">因此</span>有些知情人要命名出一个”main“函数,其实是想强调它的”<span style="color: black;">重点</span>“地位,想要人为地安排它<span style="color: black;">做为</span><span style="color: black;">第1</span>个执行的函数。<span style="color: black;">她们</span>可能认为<span style="color: black;">这般</span>命名的函数,比较容易记忆。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">之<span style="color: black;">因此</span>有些知情人要写if __name__ == __main__ ,可能想<span style="color: black;">显示</span> main() <span style="color: black;">仅有</span>在当前脚本被直接执行时才运行,不<span style="color: black;">期盼</span>被导入其它模块时运行。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">针对</span>这些“知情人”,<span style="color: black;">她们</span>有<span style="color: black;">必定</span>的道理。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">然则</span>,我个人并不<span style="color: black;">举荐</span>这种写法,<span style="color: black;">乃至</span>有时候会非常反感!</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">最明显的例子:明明<span style="color: black;">仅有</span>几十行代码,<span style="color: black;">或</span>仅有一个脚本文件,实现一个简单的功能(一小段爬虫、用 turtle 画张图等等),<span style="color: black;">然则</span>它们都按前面的样式写了。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">我每次看到这种不假思索的<span style="color: black;">负担</span>代码,就觉得难受。<span style="color: black;">为何</span>要写那行 if 语句呢?可能的话,应该拆分 main 函数,<span style="color: black;">乃至</span>不必封装成一个函数啊!</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">我个人总结出以下的经验:</p>打破惯性思维,写出地道的代码。main 入口函数是某些语言特有的,<span style="color: black;">不应</span>在 Python 中“照猫画虎”,应该<span style="color: black;">认识</span>脚本语言的特点,写出简洁优雅的风格<span style="color: black;">运用</span> main.py 而非 main()。<span style="color: black;">由于</span> Python 的程序执行单位其实是脚本文件,而非某个函数<span style="color: black;">或</span>类,<span style="color: black;">因此</span><span style="color: black;">意见</span>把入口文件命名为 main.py,内部的函数按需求而定<span style="color: black;">能够</span>的话,<span style="color: black;">运用</span><strong style="color: blue;">main</strong>.py <span style="color: black;">做为</span>入口文件。这个文件结合命令行的“-m”参数<span style="color: black;">运用</span>,非常好用。<span style="color: black;">举荐</span>阅读:Python 中 -m 的典型用法、原理解析与发展演变不<span style="color: black;">举荐</span>写if <strong style="color: blue;">name__ == __main</strong>。<span style="color: black;">首要</span>,<span style="color: black;">倘若</span><span style="color: black;">仅有</span>一个文件的话,<span style="color: black;">由于</span>不存在导出的可能,不<span style="color: black;">意见</span>写。其次,存在多文件时,入口文件(main.py)中极不<span style="color: black;">举荐</span>写这一句,此文件的代码<span style="color: black;">规律</span>应该精炼,理论上其内容<span style="color: black;">不应</span>被导出到其它模块<span style="color: black;">运用</span>,<span style="color: black;">由于</span>它是起点!最后,多文件的非入口文件<span style="color: black;">亦</span>不<span style="color: black;">意见</span>写,<span style="color: black;">由于</span>在非入口文件中写这个判断,最大的<span style="color: black;">功效</span><span style="color: black;">便是</span>写<span style="color: black;">有些</span>测试代码,<span style="color: black;">然则</span>测试代码应该分离出来,写到专门的目录或文件中。<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">小结:本文<span style="color: black;">首要</span>解释了什么是 main 入口函数,以及<span style="color: black;">为何</span>某些语言会强制<span style="color: black;">需求</span>写 main 函数;接着,解释了<span style="color: black;">为何</span> Python 不<span style="color: black;">必须</span>写 main 函数;最后则是针对某些人存在的惯性误区,分享了我个人的四点编程经验。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">本文属于“Python<span style="color: black;">为何</span>”系列<span style="color: black;">文案</span>(Python猫出品),该系列<span style="color: black;">重点</span>关注 Python 的语法、设计和发展等<span style="color: black;">专题</span>,以一个个“<span style="color: black;">为何</span>”式的问题为切入点,试着展现 Python 的迷人魅力。部分<span style="color: black;">专题</span>会推出视频版,请在 B 站收看,观看<span style="color: black;">位置</span>:</p>https://space.bilibili.com/97566624/video
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">公众号【<strong style="color: blue;">Python猫</strong>】, 本号连载<span style="color: black;">优秀</span>的系列<span style="color: black;">文案</span>,有Python<span style="color: black;">为何</span>系列、喵星哲学猫系列、Python进阶系列、好书<span style="color: black;">举荐</span>系列、技术写作、<span style="color: black;">优秀</span>英文<span style="color: black;">举荐</span>与翻译等等,欢迎关注哦。</p>
谷歌网站排名优化 http://www.fok120.com/ 谢谢、感谢、感恩、辛苦了、有你真好等。
页:
[1]