浅析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中使用SAX解析xml实例
Nov 21 Python
用Python编写脚本使IE实现代理上网的教程
Apr 23 Python
Python本地与全局命名空间用法实例
Jun 16 Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
python微元法计算函数曲线长度的方法
Nov 08 Python
python join方法使用详解
Jul 30 Python
Django的性能优化实现解析
Jul 30 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
tensorflow mnist 数据加载实现并画图效果
Feb 05 Python
Python requests及aiohttp速度对比代码实例
Jul 16 Python
Python存储读取HDF5文件代码解析
Nov 25 Python
pycharm 实现复制一行的快捷键
Jan 15 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
来自phpguru得Php Cache类源码
2010/04/15 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
详细介绍Ruby中的正则表达式
2015/04/10 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
对python中的logger模块全面讲解
2018/04/28 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
详解python polyscope库的安装和例程
2020/11/13 Python
python try...finally...的实现方法
2020/11/25 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
上课迟到检讨书
2014/01/19 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
库房管理员岗位职责
2015/02/12 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
2015年治庸问责工作总结
2015/07/27 职场文书
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL
Python 阶乘详解
2021/10/05 Python