浅析python 中__name__ = '__main__' 的作用
作者:shichen2014 发布时间:2022-07-21 16:32:28
很多新手刚开始学习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__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!


猜你喜欢
- 需求:在django中,有时候我们需要在一个表单中设置多个按钮实现不同的功能。解决方法:为不同按钮添加不同name属性,然后再后台判断nam
- 样式表是一种为超文本标签语言提供增强补充服务的技术,可对每一个html的标签做精雕细刻的修饰。只用html制作的网页,对页面内各部分的修饰能
- 目录前言一、数组遍历方法1. forEach()2. map()3. for of4. filter()5. some()、every()6
- 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字
- golang常用库:gorilla/mux-http路由库使用golang常用库:配置文件解析库-viper使用golang常用库:操作数据
- Pytorch凭借动态图机制,获得了广泛的使用,大有超越tensorflow的趋势,不过在工程应用上,TF仍然占据优势。有的时候我们会遇到这
- 本文实例分析了python对json的相关操作。分享给大家供大家参考,具体如下:什么是json:JSON(JavaScript Object
- 本文实例讲述了python实现的读取网页并分词功能。分享给大家供大家参考,具体如下:这里使用分词使用最流行的分词包jieba,参考:http
- 目录简介yieldgevent注简介没有切换开销。因为子程序切换不是线程切换,而是由程序自身控制,没有线程切换的开销,因此执行效率高,不需要
- 对于Python开发用户来讲,安装第三方库是家常便饭,下面提供两种安装方式pycharm软件安装1.打开file>setting2.点
- python读取pdf文档一、 准备工作安装对应的库pip install pdfminer3kpip install pdfminer.s
- 实例如下:import urllib.requestimport urllib.parseimport jsonwhile True: &n
- 目录1.在app下的models.py中创建新的模板2.数据迁移(用pycharm自带的Terminal工具即可)3.在app下的views
- 1.已知有一个XML文件(bookstore.xml)如下: <?xml version="1.0" e
- Anaconda简介Anaconda,是一个开源的Python发行版本,其包含了conda、Python以及一大堆安装好的工具包及依赖项,比
- 关于 channel 的使用,有几点不方便的地方:1.在不改变 channel 自身状态的情况下,无法获知一个 channel 是否关闭。2
- 1. 多线程的作用简而言之,多线程是并行处理相互独立的子任务,从而大幅度提高整个任务的效率。2. Python中的多线程相关模块和方法Pyt
- 自己写了一个简单的python脚本,用来推送zabbix告警到钉钉机器人,推送格式为markdown,有需要的可以自己修改markdown的
- 目录安装PyPDF2模块创建文件,准备PDF文档万事俱备,准备开拆文档的拆分思路python拆分计算公式:具体怎么拆?完整拆分程序:列表拆分
- 目录快速开始通过 pip 安装运行注入代码运行前几天在一个开源项目里遇到好多用户反馈,不会安装依赖,或者执行 pip install -r