对于学过其他编程语言的人来说都知道程序都是从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这个模块相当于这个包的‘入口程序

最新文章

  1. 使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和解密
  2. 怎样去除SVN中的某个版本之前的所有版本
  3. LNMP环境搭建
  4. 【HTML+CSS】七小时快速入门~~~~~~~
  5. [3d跑酷] Xcode5 打包 发布配置
  6. webrtc - web 应用相关网站
  7. Apache Jmeter(1)
  8. PHP学习笔记 - 进阶篇(6)
  9. 计算4000000000内的最大f(n)=n值---字符串的问题python实现(五岁以下儿童)
  10. elasticsearch系列(三)分表分库
  11. web页面接入QQ客服的方法
  12. Java设计模式——观察者模式
  13. Hibernate的继承映射
  14. Bitvise 使用公私玥免密登陆 服务器
  15. so文件相关
  16. 第二篇:呈现内容_第一节:Control呈现
  17. 【论文笔记】CNN for NLP
  18. Python中执行外部命令
  19. Code Blocks中配置OpenGL
  20. [py]python中的==和is的区别

热门文章

  1. Scala(三)
  2. Node.js 应用:Koa2 使用 JWT 进行鉴权
  3. php ip2long负数的问题
  4. .NET MVC 简单的插件式开发
  5. 【转】Js正则表达式
  6. 纯CSS修改checkbox复选框样式-02
  7. SAP MM MIGO & Return Delivery 组合实现部分数量的Reversal
  8. C#判断远程计算机的指定端口是否打开的代码
  9. python爬虫实战:利用scrapy,短短50行代码下载整站短视频
  10. 测者的性能测试手册:Yourkit 监控JettyYourkit 监控Jetty