if __name__ == '__main__'到底是什么?
引子
要搞清楚这个问题,可以先听一个故事~~~
像我们做事一样,都需要一个起始点,终点存在与否无关紧要。编程也是一样,任何程序都有一个入口,在所谓的静态编译语言中,如Java的入口是一个名字叫做Main的类,所有的程序都必须从这里开始运行,因此读别人的Java代码很方便,直接找入口就可以了。而Python这种动态解释型的语言不一样,他的入口就是程序的第一行,从代码开始书写的地方一直读到程序末尾,这就很有意思了,为了让程序员读别人的代码更方便,也为了让程序输出更为简洁,约定俗成了一种规范,即模仿Java,使用if __name__ == '__main__'给程序设定一个入口。
if __name__ == '__main__'是为了使Python更优雅而约定俗成的一个程序入口。
但是,这个程序入口和Java略有不同:
Java强制程序所有的输入输出、流程控制等都在Main类里面;Python只是使用if __name__ == '__main__'保证不是同一个模块的输入输出、流程控制等不相互影响。
分步骤详细举例说明
什么是
__name__?
新建一个Python程序,a.py
# a.py
print('a.py':__name__)
输出:
a.py:__main__
再新建一个Python程序,b.py
# b.py
import a
# 当前程序包的名字
print('b.py':__name__)
# b.py程序的名字
print('a.py':a.__name__)
运行b.py,输出:
b.py:__main__
a.py:a
小结
__name__是程序的名称,当前运行程序的__name__是__main__,非当前运行程序的名称为程序的模块名称,即自定义值。
如果程序里面含有程序入口,那么程序如何执行呢?
即Python只是使用if __name__ == '__main__'保证不是同一个模块的输入输出、流程控制等不相互影响。如何解释呢?
# a.py
print('01:首先执行这一行代码')
if __name__ == '__main__':
print('02:然后执行这一行代码')
运行a.py,输出:
01:首先执行这一行代码
02:然后执行这一行代码
以上说明,python是顺序执行的,这个所谓的程序入口并不能改变执行顺序。
如果程序长这样呢?
# a.py
print('a-01:这是a程序的输出')
--------------------------
# b.py
import a
if __name__ == '__main__':
print('b-01:这是b程序的输出')
运行b.py,输出:
a-01:这是a程序的输出
b-01:这是b程序的输出
可见,又一次证明程序是顺序执行的,而且程序入口并没有起作用。
那么,这个程序入口的作用是什么呢?
# a.py
if __name__ == '__main__':
print('a-01:这是a程序的输出')
--------------------------
# b.py
import a
if __name__ == '__main__':
print('b-01:这是b程序的输出')
运行b.py,输出:
b-01:这是b程序的输出
这次成功阻止了a.py程序的输出,可以轻松理解:Python只是使用if __name__ == '__main__'保证不是同一个模块的输入输出、流程控制等不相互影响。
小结
为了更简洁优雅的使用
Pyhton十分建议将每个模块的执行逻辑和输入输出都放在程序入口里面,这样在调用时不会污染程序上下文执行环境。
if __name__ == '__main__'到底是什么?的更多相关文章
- if __name__ == '__main__' 到底是何方神圣(转)
想必很多初次接触python都会见到这样一个语句,if __name__ == "__main__": 那么这个语句到底是做什么用的呢?在解释之前,首先要声明的是,不管你是多么小白 ...
- if __name__== "__main__" 的意思(作用)python代码复用
if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog http://www.dabu.info/if-__-name__ ...
- 浅析python 中__name__ = '__main__' 的作用
引用http://www.jb51.net/article/51892.htm 很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码 ...
- 【转】浅析python 中__name__ = '__main__' 的作用
原文链接:http://www.jb51.net/article/51892.htm 举例说明解释的非常清楚,应该是看到的类似博文里面最简单的一篇: 这篇文章主要介绍了python 中__name__ ...
- python中if __name__ == '__main__'
python 中__name__ = '__main__' 的作用,到底干嘛的? 有句话经典的概括了这段代码的意义: “Make a script both importable and execut ...
- 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"
在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...
- 【转载】__name__ == "__main__": 你认识我么?
<笨方法学Python>的习题50中,脚本ex50.py最后一行代码就是 if __name__ == "__main__": 那么,这句代码到底有什么用呢? 莫急莫急 ...
- 【Python中if __name__ == '__main__': 的解析】
在很多Python代码中,在代码的最下方会看到 if __name__ == '__main__':,这段代码到底有什么用呢? 在理解这个语句的作用前,需要知道的是,一般的Python文件后缀为.p ...
- 如何简单地理解Python中的if __name__ == '__main__'
https://blog.csdn.net/yjk13703623757/article/details/77918633 1. 摘要 通俗的理解__name__ == '__main__':假如你叫 ...
随机推荐
- NLP(二十八)多标签文本分类
本文将会讲述如何实现多标签文本分类. 什么是多标签分类? 在分类问题中,我们已经接触过二分类和多分类问题了.所谓二(多)分类问题,指的是y值一共有两(多)个类别,每个样本的y值只能属于其中的一 ...
- 艾编程coding老师课堂笔记:java设计模式与并发编程笔记
设计模式概念 1.1 什么是设计模式 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性. ...
- stdio.h file not found mac catalina clion 头文件 找不到
问题:mac update catalina 版本之后引发的include文件问题 近期Mac 版本升级到catalina版本,使用CLion调试c/c++程序,莫名其妙的发现,有些头文件incl ...
- Linux中使用netstat命令的基本操作,排查端口号的占用情况
Linux中netstat命令详解 Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息.Netstat用于显示与I ...
- iOS技能 - 最新美团、百度、腾讯、头条、阿里 面试题目记录
关于面试题,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家指教.主要记录一下准备过程,和面试的一些总结,希望能帮助到正在面试或者将要面试的同学吧. 美团 一面 1.简历上写的项目问了一遍,然 ...
- 数组的连接和截取(contact和slice和splice)
<script> var arr1 = ["a","b","c"]; var arr2 = [1,2,3]; //concat把 ...
- Julia的基本知识
知识来源 1.变量.整数和浮点数 Julia和Matllab挺像的,基本的变量,数值定义都差不多,所以就没必要记录了. 2.数学运算 3.函数
- Extjs简单的form+grid组合
采用的是Extjs4.2版本 http://localhost:49999/GridPanel/Index 该链接是本地连接,只是方便自己访问,读者无法正常访问. <script src=&qu ...
- PDF各种骚操作如何用python实现
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: wLsq PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...
- stand up meeting for beta release plan 12/16/2015
今天我们开会讨论一下beta版需要的feature,其中待定的feature是可选做的,如果有时间.其他都是必须实现的. 因为做插件的计划失败了,所以我们现在是pdf阅读器和取词查词加入生词本这两部分 ...