浅析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使用三角迭代计算圆周率PI的方法
Mar 20 Python
python制作花瓣网美女图片爬虫
Oct 28 Python
Python selenium如何设置等待时间
Sep 15 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
Django组件content-type使用方法详解
Jul 19 Python
Python的Tkinter点击按钮触发事件的例子
Jul 19 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
python中提高pip install速度
Feb 14 Python
在python3中实现更新界面
Feb 21 Python
python中delattr删除对象方法的代码分析
Dec 15 Python
python中 .npy文件的读写操作实例
Apr 14 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
php生成文件
2007/01/15 PHP
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
webpack下实现动态引入文件方法
2018/02/22 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
python制作简单五子棋游戏
2019/06/18 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
python同时遍历两个list用法说明
2020/05/02 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
英国电器零售商:PRC Direct
2018/06/21 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
教师档案管理制度
2014/01/23 职场文书
高中生的自我评价
2014/03/04 职场文书
市场拓展计划书
2014/05/03 职场文书
社区植树节活动总结
2015/02/06 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
导游词之南京夫子庙
2019/12/09 职场文书