有句话经典的概括了这段代码的意义:

“Make a script both importable and executable”

意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行

这句话,可能一开始听的还不是很懂。下面举例说明:

先写一个模块:

#module.py
def main():
print "we are in %s"%__name__
if __name__ == '__main__':
main()

这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in __main__“,说明我们的if语句中的内容被执行了,调用了main():

但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢?

#anothermodle.py
from module import main
main()

其执行的结果是:we are in module

但是没有显示”we are in __main__“,也就是说模块__name__ = '__main__' 下面的函数没有执行。

这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。

总结一下:

如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。

这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行

最新文章

  1. 父子页面之间元素相互操作(iframe子页面)
  2. Android项目实战(十三):浅谈EventBus
  3. [java]删除数组中的某一个元素
  4. Linux 权限设置
  5. django1.9 + uwsgi +nginx1.9 部署(centos6.6)
  6. PowerDesigner生成sql及HTML格式数据库文档
  7. java File.mkdirs和mkdir区别
  8. Java中的final修饰符
  9. js模仿jquery里的几个方法parent, parentUntil, children
  10. [TypeScript] Installing TypeScript and Running the TypeScript Compiler (tsc)
  11. Android学习笔记(五)Fragment简介
  12. Semaphore (通常用于限制可以访问某些资源(物理或逻辑的)的线程数目)
  13. 04-OC属性的使用、自动释放池、封装和继承
  14. POJ 1470 Closest Common Ancestors(最近公共祖先 LCA)
  15. JavaScript操作符(一元操作符)
  16. 国内可用的Internet时间同步服务器地址(NTP时间服务器)
  17. linux oops调试
  18. Exp5 MSF基础运用 20154320 李超
  19. 「PKUWC 2018」Minimax
  20. Fedora Server 21下OpenJdk和Oracle Jdk共存

热门文章

  1. Template简介
  2. net share列出了Windows的默认共享(包括C盘)
  3. 恢复Win10照片查看器
  4. 发布ActiveX控件
  5. Android零基础入门第18节:EditText的属性和使用方法
  6. PRML Chapter2
  7. Python:Numpy学习
  8. Delphi Thread.Queue与Synchronize的区别(差别: Synchronize是阻塞,Queue是非阻塞)
  9. 配置我的Ubuntu Server记(包括桌面及VNC,SSH,NTP,NFS服务) good
  10. Java实现Qt的SIGNAL-SLOT机制(保存到Map中,从而将它们关联起来,收到信号进行解析,最后反射调用)