写作背景:
看着别人的代码,if __name__ == "__main__"
。Okay,本人宣告卡机~~
百度后,好像知道了点什么。
其他编译语言经常出现def main(),然后写一大串代码,表示它把想要干的事情定义到了main()函数,以后想干啥,直接写个main(),就ok了。这些语言的运行,需要main()函数作为程序的入口,来实现程序的运行。
然而,Python 这个脚本语言,不需要像编译型语言那样:先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。简单点,就是,如果你看到if __name__ == “__main__“
,就把它当作是 Python 模拟的程序入口即可。Python 本身并没有规定这么写,这只是一种编码习惯。(其他语言比较常用)
一般来说,一个 Python 源码文件可以被直接运行(假设,我手上有个aaa.py文件,在 CMD里调用,直接打python aaa.py即可调用),也可以作为模块(也就是库)被导入。看你的需求。
下面分别介绍两种情况:
1.plan.py(可执行情况)
print("Plan A")
if __name__ == "__main__":
print("Plan B")
这时候,我们用CMD直接调用这个文件
看到Plan A 和 Plan B 都成功执行。(说明:如果.py文件被直接调用,内置变量__name__
等于当前文件名(包含后缀.py,这里就是plan.py),"__main__"
等于当前执行文件的名称(包含后缀.py,这里就是plan.py)。
Consequently, 文件被直接调用时,__name__ = "__main__"
成立,执行后面的语句。
2.imported_plan.py(不可执行情况)
import plan
这里直接拿plan来用,看当plan.py被调用时,探究__name__
与"__main__"
是否一样
Obviously, 自从被import之后,这一切都变了。__name__
变成了模块名称(不包含后缀.py,即plan。)而我们的"__main__"
还是那个纯真的plan.py,所以__name__
与"__main__"
从此形同陌路啦!
Consequently, 文件被import来用时,__name__ = "__main__"
不成立,不会执行后面的语言。
3.conclusion:
总之,记住:
- 如果.py被直接调用,
if __name__ == ”__main__“
为True,后面的语句执行。 - 如果.py被其他人import去用,那么
if __name__ == “__main__”
为False,后面的语句是不可能执行的,不可能的,不可能的。记住了吗?That's all.
对main()还是不太认识,之后要补充一下。
参考文章:http://www.dengfeilong.com/post/60.html
https://blog.csdn.net/yjk13703623757/article/details/77918633