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

第一个例子:这是在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__':的更多相关文章

  1. 理解 if __name__ == '__main__'

    简单地理解Python中的if __name__ == '__main__' if __name__ == '__main__'的意思是: 当.py文件被直接运行时,if __name__ == '_ ...

  2. 一个故事带你理解if __name__ == '__main__'

    如果你刚刚接触python,相信会在看别人的程序的时候会遇到if __name__ == '__main__'酱紫的语法,如果当时没看懂现在也一知半解的话,看下去,本文可以帮你解决这个问题. 大家都知 ...

  3. (转)Python中如何理解if __name__ == '__main__'

    摘要 通俗的理解 __name__ == '__main__' :假如你叫李凯.py,在朋友眼中,你是李凯( __name__ == '李凯' ):在你自己眼中,你是你自己( __name__ == ...

  4. python中如何理解if __name__ == '__main__'

    __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ .这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行.我们通过一个简单的例子来理解 ...

  5. 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"

    在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...

  6. 如何理解 if __name__ == "__main__"

    小明.py 朋友眼中你是小明(__name__ == '小明'), 你自己眼中你是你自己(__name__ == '__main__'), 你编程很好, 朋友调你去帮他写程序(import 小明, 这 ...

  7. 你真的理解 if __name__ == '__main__' 的作用么?

    https://blog.csdn.net/Amberdreams/article/details/88382993

  8. 【转】Python 中的 if __name__ == '__main__' 该如何理解

    转自:http://blog.konghy.cn/2017/04/24/python-entry-program/ 程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面 ...

  9. if __name__ == '__main__' 该如何理解

    Python 中的 if __name__ == '__main__' 该如何理解 程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# ...

随机推荐

  1. html to pdf小工具,支持evernote导出的html和firefox插件scrapbook

    周末花了一天时间用wpf写了一个html转换为pdf的小工具. 已经在win7 32位 和win8 64两台机器上测试,目前基本可用,特拿来分享. 程序下载地址:http://pan.baidu.co ...

  2. vscode 中使用 csscomb

    我看中 csscomb 主要是用来给 css 属性排序用的,当然他也有格式化的作用: 1.安装不必说,但是装了之后,默认似乎没用: 2.点开 文件-首选项,搜下 csscomb 就知道了: 3.第一个 ...

  3. 静态绑定 self 和 static的区别

    后期静态绑定 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 准确说,后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwar ...

  4. could not execute menu item系统找不到指定的文件

    Wamp3.0.6 64bit,系统任务栏图标,左键,Apache菜单,httpd.conf,报错“could not execute menu item.....系统找不到指定的文件” 根据网上的搜 ...

  5. ubuntu low graphic mode---disable docker -self start.

    --------- /etc/default/docker.conf-----设置启动参数. /etc/init/docker.conf------------不好使(only mysql) star ...

  6. mybatis三剑客之mybatis-pagehelper分页插件

    这是pom.xml里的依赖: 后续再讲具体的使用

  7. 解决MySQL报错:1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'informat

    解决MySQL报错:1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'informat ...

  8. 【代码片段】Python发送带图片的邮件

    # coding=utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import ...

  9. (转)nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理

    Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案.nginx可以用轮询.IP哈希.URL哈希等方式调度后端服务器,同时也能提供健康检查功能 ...

  10. HDU5023:A Corrupt Mayor's Performance Art(线段树区域更新+二进制)

    http://acm.hdu.edu.cn/showproblem.php?pid=5023 Problem Description Corrupt governors always find way ...