简介:

__name__是当前模块名,当模块被直接运行时模块名为_main_,也就是当前的模块,当模块被导入时,模块名就不是__main__,即代码将不会执行。

关于代码if __name__ == '__main__': 下面举几个例子解释下:

先编写一个测试模块add1.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*- ' a test module ' def addFunc(a,b):
return a+b print('add1计算结果:',addFunc(1,1))

再编写一个模块add2.py来调用上面的模块:

#!/usr/bin/env python3
# -*- coding: utf-8 -*- ' a test module ' import add1 print('调用add1模块执行的结果是:',add1.addFunc(12,23))

在刚才两个模块的路径(我的路径为:“C:\work”)中打开cmd,用命令行运行add1.py:

C:\work>python add1.py
add1计算结果: 2

在刚才两个模块的路径中打开,用命令行运行add2.py:

C:\work>python add2.py
add2计算结果: 2
调用add1模块执行的结果是:35 #显然,当我运行add2.py后第一句并不是调用者所需要的,为了解决这一问题,Python提供了一个系统变量:__name__ #注:name两边各有2个下划线__name__有2个取值:当模块是被调用执行的,取值为模块的名字;当模块是直接执行的,则该变量取值为:__main__

于是乎,被调用模块的测试代码就可以写在if语句里了,如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*- ' a test module ' def addFunc(a,b):
return a+b if __name__ == '__main__':
print('add1计算结果:',addFunc(1,1))

当再次运行add1.py:

C:\work>python add1.py
add1计算结果: 2 #结果并没有改变,因为调用add1.py时,__name__取值为__main__,if判断为真,所以就输出上面的结果

当再次运行add2.py:

C:\work>python add2.py
调用test模块执行的结果是: 35
#此时我们就得到了预期结果,不输出多余的结果。能实现这一点的主要原因在于当调用一个module时,此时的__name__取值为模块的名字,所以if判断为假,不执行后续代码。

所以代码iif __name__ == '__main__': 实现的功能就是Make a script both importable and executable,也就是说可以让模块既可以导入到别的模块中用,另外该模块自己也可执行。

学过c语言的话,可以知道C语言定义主程序入口就是main()函数,main代表了程序主入口,即和系统的接口(说白了就是命令行直接调用)。if name == 'main': 这句话的核心无非就是在判断该程序文件是否作为主程序入口罢了。 如果在命令行直接调用该程序文件,该文件作为主程序入口,name == 'main'理所当然啊。 如果在命令行调用其他程序文件,主程序入口name == 'main'自然不成立,因为main等于那个你在命令行输入的程序名。 这个东西的好处就是,别人调用时(你并非是主程序入口)后面的东西不运行,自己命令行执行时(你是主程序入口)后面的东西运行。故可以作为测试用。

Python:if __name__ == '__main__'的更多相关文章

  1. python中if __name__ == '__main__' :main(()

    例如: if __name__ == '__main__': main() 如果运行的是主函数的话,执行下一句main() 如果作为模块被其他文件导入使用的话,我们就不执行后面的main()什么的. ...

  2. 【Python】if __name__ == "__main__"做了什么?

    在Python的很多源文件中,会有这样的语句: if __name__ == '__main__': # script code here 比如有两个源文件A.py和B.py,都有上面的代码:在B.p ...

  3. Python 的 if __name__ == '__main__'

    Python 文件 最后部分会有: if __name__ == '__main__': TestRLSO()……………… 1)首先,这是一个判断语句. 表示执行的是此代码所在的文件.如果这个文件是作 ...

  4. python 中if __name__ = '__main__' 的作用

    python 中if __name__ = '__main__' 的作用 前言 首先我们要知道在python里面万物皆对象,模块也是对象,并且所有的模块都有一个内置属性 __name__. 一个模块的 ...

  5. python中if __name__ == '__main__'是什么?

    __name__和__main__认识 作用:一般用于测试程序的功能,if __name__ == '__main__':下面的代码会被执行,但当前.py文件被当做模块导入的时候,main下面的代码就 ...

  6. Python中if __name__ == '__main__':的作用和原理

    if __name__ == '__main__':的作用 一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行. ...

  7. python中if __name__ == "__main__":用法解析

    __name__: __name__作为模块的内置属性,简单点说呢,就是.py文件的调用方式. __main__: 如果__name__等于"__main__"就表示是直接执行. ...

  8. 小甲鱼第51讲:《__name__="__main__"、搜索路径和包》课后练习题

    测试题: 0. __name__属性指的是在调用该模块的时候调用的函数名称,方便在模块的被调用的时候,模块内部被调用的函数不会被运行. 1. 当模块作为主程序运行的时候,__name__属性的值是“_ ...

  9. python中if __name__ == '__main__'

    python 中__name__ = '__main__' 的作用,到底干嘛的? 有句话经典的概括了这段代码的意义: “Make a script both importable and execut ...

随机推荐

  1. 【Spark 深入学习 -09】Spark生态组件及Master节点HA

    ----本节内容------- 1.Spark背景介绍 2.Spark是什么 3.Spark有什么 4.Spark部署 4.1.Spark部署的2方面 4.2.Spark编译 4.3.Spark St ...

  2. SDL示例一:实现七段数码管的显示

    [时间:2017-05] [状态:Open] [关键词:sdl2,数字,七段数码管,图形显示,示例代码] 0 引言 本文是针对我的step-into-sdl2/7LedDigit的原理介绍,有兴趣的可 ...

  3. rc.d/rc.local 自动启 tomcat 启不来

    针对自己配置的JDK环境有可能会出现这样的情况. tomcat能启来.但自启动就不行,原因 JDK是后安装的,环境变量配置在 /etc/profile 里面. tomcat 配了自启动.但reboot ...

  4. SILK 预测模块分析

    SILK是一种新结构的基于噪声整形量化算法的编解码框架.不同于类CELP的AMR,EVRC,G729,Speex等标准. 类CELP的结构都是以码本激励为量化框架的编码器.但是这里并不讨论NSQ结构和 ...

  5. sql操作总结

    SQL 语句的多表查询方式例如:按照 department_id 查询 employees(员工表)和 departments(部门表)的信息.方式一(通用型):SELECT ... FROM ... ...

  6. [转]mysql大表更新sql的优化策略

    看了该文章之后,很受启发,mysql在update时,一般也是先select.但注意,在Read Committed隔离级别下,如果没有使用索引,并不会锁住整个表, 还是只锁住满足查询条件的记录而已. ...

  7. 两次内存断点法寻找OEP

    所谓“两次内存断点法寻找OEP”,按照<加密与解密*第三版>上的解释来说,就是这样的.一般的外壳会依次对.text..rdata..data..rsrc区块进行解压(解密)处理,所以,可以 ...

  8. Vue:event对象

    一.什么是event对象 event对象:代表的是事件的状态.比如获取当前的元素:e.Target. 二.事件冒泡 什么是事件冒泡呢?百度百科的解释如下: 当事件发生后,这个事件就要开始传播(从里到外 ...

  9. talk 1

    话转偏锋 让别人可以接话, 同时可以设计转换到的话题, 把"谈话带到正确的轨道", 就像下象棋一样, 要看三步 A: 很喜欢看篮球比赛, 对B说 我每次都堵湖人队会赢 B: 篮球最 ...

  10. nginx负载均衡一:基础知识

    基础信息 nginx 的 upstream目前支持 4 种方式的分配  1).轮询(默认)  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.  2).weight ...