浅析python 中__name__ = '__main__' 的作用


Posted in Python onJuly 05, 2014

很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main__' 的作用,到底干嘛的?

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

“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__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

Python 相关文章推荐
Python实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
Python入门必须知道的11个知识点
Mar 21 Python
python实现维吉尼亚加密法
Mar 20 Python
python实现电子书翻页小程序
Jul 23 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
使用selenium和pyquery爬取京东商品列表过程解析
Aug 15 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
Django操作session 的方法
Mar 09 Python
Python 如何批量更新已安装的库
May 26 Python
Django后端按照日期查询的方法教程
Feb 28 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 Python
使用scrapy实现增量式爬取方式
Jun 21 Python
python在windows下实现备份程序实例
Jul 04 #Python
python调用短信猫控件实现发短信功能实例
Jul 04 #Python
Python实现类继承实例
Jul 04 #Python
Django集成百度富文本编辑器uEditor攻略
Jul 04 #Python
一个小示例告诉你Python语言的优雅之处
Jul 04 #Python
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 #Python
Python Deque 模块使用详解
Jul 04 #Python
You might like
mysql建立外键
2006/11/25 PHP
php 特殊字符处理函数
2008/09/05 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
php截取视频指定帧为图片
2016/05/16 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
为Python程序添加图形化界面的教程
2015/04/29 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
spyder常用快捷键(分享)
2017/07/19 Python
python实现感知器
2017/12/19 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
thinkphp5 路由分发原理
2021/03/18 PHP
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
小学班长竞选演讲稿
2014/04/24 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书