page contents

Python中的“main函数”是咋写的?

学过C、C++、Java等编译型语言的应该都清楚,不管你的代码怎么写的,都需要写一个main函数,用来指示程序的入口,或说程序最开始应该从哪里开始执行。例如如下的C++代码:

attachments-2026-05-5jOUX9Bs6a0bbe87ea13a.png学过C、C++、Java等编译型语言的应该都清楚,不管你的代码怎么写的,都需要写一个main函数,用来指示程序的入口,或说程序最开始应该从哪里开始执行。例如如下的C++代码:

# include <iostream>
using namespace std;
int main(){
    cout << "Hello, World!" << endl;
}

上面的代码指示计算机,从int main()这里开始执行,输出内容“Hello, World!”。而Python显然没那么啰嗦,因为你大概率是这样实现输出内容的:

print("Hello, World!")

没有大括号、没有明确main入口、一行代码完事,怎一个简单粗暴了得。

但随着使用Python的过程不断深入,迟早会在别人的源码中看到一个类似main.py的文件,好像是在指示这是一个main入口,而里面也赫然写了一行熟悉又陌生的代码,仿佛这就是整个Python程序的入口:

if __name__ == '__main__':

别的语言为什么会有main?

先跳出Python,不管是C还是Java,它们要求程序都必须有一个明确的入口。因为电脑脑子是一根筋,你不告诉它从哪开始跑代码,它就不知道干什么。所以语言设计者们就规定:main函数是程序唯一的、固定的启动键。

于是执行程序的流程变为:

发出程序运行指令 → 找main的位置 → 进入main并顺序执行其中的代码 → 程序结束。

但是!Python偏不按套路出牌。Python的逻辑很直白:

打开文件 → 从上读到下 → 读到哪执行代码到哪。

这也是很多解释性语言的代码运行特点,例如Shell、Lua等语言。

可自由过头,总会有出bug的时候,这时候,if __name__ == '__main__'就出现了,弥补Python没有main入口的缺陷。

if __name__ == '__main__' 的作用

我们把Python代码文件抽象成你的作业,它有两种用处:

自己用来上交: 你写的很认真,解题思维清晰,逻辑缜密;

借别人抄: 班上总有同学借你作业抄,他们只想抄你解题过程的关键部分,不想抄的一模一样被老师发现。

而 if __name__ == '__main__',就是作业下的一行免责声明:

「此部分是我作业的专属写法,你照抄必背发现!!!」

是不是一下子就明白了?说白了就是:区分文件是自己运行,还是被别人借用。

举个栗子说明一下

新建一个homework.py文件,写上以下代码:

def do_homework():
    print("Step-1: because A + B = C")
    print("Step-2: and A * B = D")
    print("Step-3: so, E = m * c^2")

# 免责声明
if __name__ == '__main__':
    print("Name: Zhang-3, Class: SSR")
    # 做作业总是美言老师一句,而其他同学不屑于这么干
    print("My teacher, you're so beautiful today!")
    do_homework()

运行代码,你的输出是:

Name: Zhang-3, Class: SSR
My teacher, you're so beautiful today!
Step-1: because A + B = C
Step-2: and A * B = D
Step-3: so, E = m * c^2

这个时候,文件执行者是主角本人,判断条件成立,if里面的代码全部执行。

再建一个copy_homework.py,是你同学抄你的作业:

import copy_homework

print("I've copied homework, yeah!")

运行代码,输出:

I've copied homework, yeah!

这时,你会发现那些原本的个人信息、拍马屁发言全都不会出现。

这就是这行if代码的核心作用:被别人导入调用时,隐藏内部测试代码,只保留关键的函数、类等内容。

如果没有这行if,按照Python的逻辑,需要先执行完homework.py中的所有代码,那么你抄作业必露馅。

一定要写这行if吗?

对于初学者、或者只写小脚本,完全可以不写。

但如果你想做项目、写工具、封装代码,那么这行代码是必然的:

隔离测试代码: 用来隔离自己写代码的测试语句,别人导入文件时不会乱执行。

规范代码结构: 把执行逻辑放到if内部,函数、类在外面,代码条理更加清晰。

 更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

2059 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 2059 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章