python对 if __name__=='__main__'的理解
对于学过其他编程语言的人来说都知道程序都是从main函数开始执行的,而对于python来说他并没有主函数,他不像其他语言需要需要转化为二进制文件
然后才能执行,他时通过翻译器从第一行开始逐行执行,所以对于python来说并没有确切的入口,对于一个python代码来说,他不仅可以直接运行还可以
作为一个模块导入。但是无论是导入还是直接运行其最外层代码总是会被运行,但是当我们在做这个模块的时候总会有一些调试性的代码,希望在单独执时
检测程序的正确与否,而在用为模块导入时不希望执行。
这时我们便想到了__name__,因为__name__保存的是当前模块执行过程中的名称下面用一段代码来说明:
#该文件名字为test.py
def getError():
print ("当前执行的模块是%s" % __name__)
当你想测试该模块是否能正常运行时,对于该程序你可以直接在python shell接面直接调用该方法,但时对于模块中方法较多时当然不可能对方法进行在python shell中一个一个调用
这不仅耗时还很麻烦,所以人们想到了在模块中直接写调用方法进行如下改进
def getError():
print ("当前执行的模块是%s" % __name__)
getError()#结果为当前执行的模块是__main__
这样当方法很多时你依然可以很方便的对代码进行测试,但是这同时现了问题,当你把该模块导入到其他模块中时你会发现你不想出现的代码也出现了如下所示:
import test
test.getError()#其结果为:当前执行的模块是test
#当前执行的模块是test
你会发现在模块中我们的测试代码也执行了,同时发现__name__也发生了改变这是因为__name__保存的是当前模块的名字,当模块单独执行时其值为__main__
其中__main_是顶级代码执行范围的名称,模块可以通过检查自己的__name__来发现它是否在主范围内运行,这样就可以区分其是单独运行还是导入其他模块执行
而在其他模块中执行时会发现__name__的值为模块的名字所以对代码可以有一下更改:
def getError():
print ("当前执行的模块是%s" % __name__) if(__name__=='__main__'):#可以判断是否是单独执行
getError()
这不仅可以保证模块可以单独执行,同时还可以在作为模块导入时不会执行第二遍。其中__main__就时表明这个程序的出口和入口
对于一个文件我们有__main__来表明是否在主范围运行,对于一个包同样有一个__main__.py这个模块相当于这个包的‘入口程序
python对 if __name__=='__main__'的理解的更多相关文章
- Python中if __name__ == "__main__": 的理解
1.在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在pytho ...
- Python中if __name__ = "__main__"的理解
通俗的理解__name__ ="__main__"的意思就是:当.py文件被直接运行时,if __name__ = "__main__"之下的代码快将被运行:当 ...
- 魔力Python--if __name__ == '__main__' 的理解
if __name__ == '__main__' 的理解 __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ . 这句话的意思就是,当模块被直接运行时,以下代码块将被运行, ...
- python 中if __name__ = '__main__' 的作用
python 中if __name__ = '__main__' 的作用 前言 首先我们要知道在python里面万物皆对象,模块也是对象,并且所有的模块都有一个内置属性 __name__. 一个模块的 ...
- Python中“if __name__=='__main__':”理解与总结
1 引言 在Python当中,如果代码写得规范一些,通常会写上一句“if __name__==’__main__:”作为程序的入口,但似乎没有这么一句代码,程序也能正常运行.这句代码多余吗?原理又在哪 ...
- python中的__name__=='__main__'如何简单理解(一)
1. 摘要: 通俗的理解_name_ == '_main_':假如你叫小明.py,在朋友眼中,你是小明(_name_ == '小明'):在你自己眼中,你是你自己(_name_ == '_main_') ...
- Python中if __name__ == '__main__':理解
在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在python编 ...
- python if __name__=='__main__'的理解
定义一个模块叫module.py: def main(): print "we are in %s" %__name__ if __name__=='__main__': main ...
- Python中if __name__ == "__main__": 的作用
在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在python编 ...
随机推荐
- C#工具:Bootstrap WPF Style,Bootstrap风格的WPF样式
简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...
- 网页数据抓取工具,webscraper 最简单的数据抓取教程,人人都用得上
Web Scraper 是一款免费的,适用于普通用户(不需要专业 IT 技术的)的爬虫工具,可以方便的通过鼠标和简单配置获取你所想要数据.例如知乎回答列表.微博热门.微博评论.淘宝.天猫.亚马逊等电商 ...
- Java开发笔记(三十四)字符串的赋值及类型转换
不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类 ...
- Dubbo+ZK与Eureka注册中心比较
Eureka可以很好的应对网络故障导致部分节点失去联系的情况,而不会像zk那样因为选举导致整个集群不可用 dubbo + zk 当向注册中心查询服务注册列表时,可以容忍注册中心返回的是几分钟以前的注册 ...
- Dynamics 365中自定义工作流活动获取的上下文分析及注意事项
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复244或者20170306可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- SAP MM 预留单据里的Base date和Requirement date
SAP MM 预留单据里的Base date和Requirement date Base date可以在预留创建的初始界面指定, 这个日期可以作为预留各个行项目默认的requirement date. ...
- Dynamics 365-如何指定邮件收件人的地址
如果CRM Entity勾选了Sending Email,那么这个Entity的Records是可以直接作为Email的收件人使用的,而邮件地址是Entity的Primary Email字段. 在我们 ...
- ArcGIS for JavaScript学习(一)
一 API准备 从网上下载开发包:ArcGIS for JavaScript(百度网盘地址) sdk中含有API的帮助和例子 2.离线部署(以IIS为例) 配置IIS(详见网络):解压离线包,包中的 ...
- Android Picasso最详细的使用指南
Picasso 是Square 公司开源的Android 端的图片加载和缓存框架.Square 真是一家良心公司啊,为我们Android开发者贡献了很多优秀的开源项目有木有!像什么Rerefoit . ...
- Xshell工具使用--连接VMware虚拟机
假设有这样的场景,开发者用的是Windows系统,且系统的存储资源和内存有限,在运行VMware虚拟机中做一些测试时,通常会碍于电脑的VMWare客户端图形界面的响应速度太慢.而在Xshell中对虚拟 ...