浅析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代码(逐级优化)
May 25 Python
python数据结构之二叉树的遍历实例
Apr 29 Python
Python操作Word批量生成文章的方法
Jul 28 Python
Django学习笔记之Class-Based-View
Feb 15 Python
Python之py2exe打包工具详解
Jun 14 Python
Python中的浮点数原理与运算分析
Oct 12 Python
关于Python数据结构中字典的心得
Dec 04 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
python处理大日志文件
Jul 23 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
python装饰器代码深入讲解
Mar 01 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
终于听上了直流胆调频
2021/03/02 无线电
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
一个基于PDO的数据库操作类
2011/03/24 PHP
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
thinkPHP查询方式小结
2016/01/09 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
js cookies实现简单统计访问次数
2009/11/24 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
AngularJS优雅的自定义指令
2016/07/01 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
vuex的使用步骤
2021/01/06 Vue.js
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python3实现从指定路径查找文件的方法
2015/05/22 Python
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Python笔记之工厂模式
2019/11/20 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
文体活动总结
2015/02/04 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
亮剑观后感500字
2015/06/05 职场文书
身份证丢失证明
2015/06/19 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
Python 如何安装Selenium
2021/05/06 Python
Pandas数据结构之Series的使用
2022/03/31 Python