浅析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 list使用示例 list中找连续的数字
Jan 27 Python
Python使用Flask框架获取当前查询参数的方法
Mar 21 Python
和孩子一起学习python之变量命名规则
May 27 Python
python递归函数绘制分形树的方法
Jun 22 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
Django实现分页显示效果
Oct 31 Python
Python下利用BeautifulSoup解析HTML的实现
Jan 17 Python
python实现微信打飞机游戏
Mar 24 Python
Python pip install如何修改默认下载路径
Apr 29 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 Python
k-means & DBSCAN 总结
Apr 27 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 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 批量删除 sql语句
2009/06/05 PHP
PHP多例模式介绍
2013/06/24 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP
Python中的 Set 与 dict
2022/03/13 Python
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫