理解if __name__ == '__main__':
一开始没怎么注意这个语句,这两天在模拟知乎登陆时准备刨根问底了,先看两行代码片段
第一个例子:这是在login.py文件的一部分,其他我们忽略,只关注print()函数的内容
import time
import json if __name__ == '__main__': print(__name__) cookie = http.cookiejar.LWPCookieJar('cookie') try:
cookie.load(ignore_discard=True)
第二个例子:在另一个文件wechart.py中,我们引入login文件,通用我们忽略别的代码,只关注print()函数
#import itchat
'''from login import printName
printName()''' import login
print(login.__name__)
例子看完了,我们来看打印的结果吧,同样都是打印login文件中的内置变量__name__,两次打印会有什么不同呢?
第一个例子打印结果:

第二个例子打印结果:

看到区别了吧,首先这个内置变量__name__时标识所在文件或模块的名字,在自身文件中执行显示为'__main__',在其他文件中调用显示为文件名全名。
看完了__name__的命名规则,我们就容易理解if语句:
if __name__ == '__main__': 这句话实际上是在判断当前语句在什么环境下调用的,如果是在本文件中调用,则条件为真,如果实在其他模块中调用,则条件为假
那么为什么大家喜欢在代码的开头加上一句if判断呢:场景1:如果一个文件被打包成模块,在这个文件中存在一个语句块用if __name__ == '__main__'包裹着,其他代码没有用if语句包裹。然后这个模块作为第三方模块被别人引用,如下:我们把上一段代码的注释去掉。
from login import printName
printName() import login
print(login.__name__)
我们再来看执行结果: 我们发现,仅仅时导入模块这个动作,login文件中的代码也被执行了(当然时if语句之外的代码)

而我们导入模块时是不希望模块中的代码被执行的,只希望他在调用时执行,而非导入时就执行。所以,在打包模块时,我们加上一句if __name__ == '__main__',这样所有代码都不会被执行。
后来,我们发现在所有的代码开始之前,都有if __name__ == '__main__',再后来,这就变成了程序的入口(约定俗成)。
在pycharm等集成开发环境中,我们也会看到,在if __name__ == '__main__' 的左侧,会出现一个绿色小箭头,所谓默认的开始入口:

理解if __name__ == '__main__':的更多相关文章
- 理解 if __name__ == '__main__'
简单地理解Python中的if __name__ == '__main__' if __name__ == '__main__'的意思是: 当.py文件被直接运行时,if __name__ == '_ ...
- 一个故事带你理解if __name__ == '__main__'
如果你刚刚接触python,相信会在看别人的程序的时候会遇到if __name__ == '__main__'酱紫的语法,如果当时没看懂现在也一知半解的话,看下去,本文可以帮你解决这个问题. 大家都知 ...
- (转)Python中如何理解if __name__ == '__main__'
摘要 通俗的理解 __name__ == '__main__' :假如你叫李凯.py,在朋友眼中,你是李凯( __name__ == '李凯' ):在你自己眼中,你是你自己( __name__ == ...
- python中如何理解if __name__ == '__main__'
__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ .这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行.我们通过一个简单的例子来理解 ...
- 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"
在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...
- 如何理解 if __name__ == "__main__"
小明.py 朋友眼中你是小明(__name__ == '小明'), 你自己眼中你是你自己(__name__ == '__main__'), 你编程很好, 朋友调你去帮他写程序(import 小明, 这 ...
- 你真的理解 if __name__ == '__main__' 的作用么?
https://blog.csdn.net/Amberdreams/article/details/88382993
- 【转】Python 中的 if __name__ == '__main__' 该如何理解
转自:http://blog.konghy.cn/2017/04/24/python-entry-program/ 程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面 ...
- if __name__ == '__main__' 该如何理解
Python 中的 if __name__ == '__main__' 该如何理解 程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# ...
随机推荐
- Inflater与findViewById()区别
/** * Inflater英文意思是膨胀,在Android中应该是扩展的意思吧. LayoutInflater的作用类似于 * findViewById(),不同点是LayoutInflater是用 ...
- BigDecimal 解决double精度丢失问题(加减乘除)
package com.qcloud.component.publicservice.util; import java.math.BigDecimal; /** * 由于Java的简单类型不能够精确 ...
- 亿级别G级别文本数据去重
亿级别G级别文本数据去重 文件总行数 字节数 去重后行数 [root@d mongoexport]# wc -l superpub-ask-question.csv126530681 superpub ...
- scrapy爬虫系列之七--scrapy_redis的使用
功能点:如何发送携带cookie访问登录后的页面,如何发送post请求登录 简单介绍: 安装:pip3 install scrapy_redis 在scrapy的基础上实现了更多的功能:如reques ...
- nodejs学习笔记Node.js 调试命令
3.4 调试 47 下面是一个简单的例子: $ node debug debug.js < debugger listening on port 5858 connecting ...
- 【selenium】selenium ide的安装过程
简介一:SeleniumIDE安装 1.安装seleniumIDE,打开火狐浏览器,地址栏输入地址—>点击Add按钮—>安装结束后重启FireFox—>在菜单栏中可以看到Seleni ...
- Word 2010文档自动生成目录和某页插入页码
一.Word 2010文档自动生成目录 关于Word文档自动生成目录一直是我身边同学们最为难的地方,尤其是毕业论文,经常因为目录问题,被要求修改,而且每次修改完正文后,目录的内容和页码可能都会发生变化 ...
- Python学习开发资源大全列表
1 机器学习和计算机视觉 Crab:灵活.快速的推荐引擎 gensim:人性化的话题建模库 hebel:GPU 加速的深度学习库 NuPIC:智能计算 Numenta 平台 pattern:Pytho ...
- PAT 1117 Eddington Number [难]
1117 Eddington Number (25 分) British astronomer Eddington liked to ride a bike. It is said that in o ...
- wordpress的安装及使用
1.如何查看别人的wordpress站点所有的模板 2.如何使用自定义的模板