一开始没怎么注意这个语句,这两天在模拟知乎登陆时准备刨根问底了,先看两行代码片段

第一个例子:这是在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__' 的左侧,会出现一个绿色小箭头,所谓默认的开始入口:

最新文章

  1. 一键编译go文件命令.bat
  2. myeclipse中的weblogic 服务未正常关闭问题解决。
  3. Linux 数组
  4. Oracle的Numer类型与C,C#数据类型对应关系
  5. SVG的路径动画效果
  6. CentOS安装TortoiseSVN svn 客户端
  7. Linux workqueue工作原理 【转】
  8. Leetcode#152 Maximum Product Subarray
  9. 【HDOJ】1669 Jamie's Contact Groups
  10. iOS AFNetworking 详解
  11. PHP:phpMyAdmin如何解决本地导入文件(数据库)为2M的限制
  12. [国嵌笔记][020][ARM家族大检阅]
  13. [PHP]PDO占位符预处理在 IN 和 LIKE 中用法
  14. 编译安装 apache 2.4.6
  15. [Luogu 3389]【模板】高斯消元法
  16. 如何命名Java变量
  17. 大厂面试官:Java工程师的“十项全能”
  18. 关于.NetCore 2.0 迁移到2.1的一些建议和问题
  19. Linux基本数据类型大小——int,char,long int,long long int
  20. ShellExecute函数的问题

热门文章

  1. 从零打造在线网盘系统之Hibernate配置O/R映射
  2. codeforces#505--B Weakened Common Divisor
  3. python linux 自动补全 tab.py
  4. Java字符编码问题
  5. D2 Magic Powder -1/- 2---cf#350D2(二分)
  6. Highway Project---zoj3946(最短路SPFA)
  7. Java-idea-常用技巧-转maven,解决包依赖冲突
  8. 从WW中剥离一个三维场景框架
  9. 一些动态规划问题的java实现
  10. Linux服务器安装jdk+tomcat