if __name__ == "__main__"

写作背景:
看着别人的代码,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

posted @ 2019-04-06 23:22  喜欢吃面的猪猪  阅读(182)  评论(0编辑  收藏  举报