Python:if __name__ == '__main__'
简介:
__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__'的更多相关文章
- python中if __name__ == '__main__' :main(()
例如: if __name__ == '__main__': main() 如果运行的是主函数的话,执行下一句main() 如果作为模块被其他文件导入使用的话,我们就不执行后面的main()什么的. ...
- 【Python】if __name__ == "__main__"做了什么?
在Python的很多源文件中,会有这样的语句: if __name__ == '__main__': # script code here 比如有两个源文件A.py和B.py,都有上面的代码:在B.p ...
- Python 的 if __name__ == '__main__'
Python 文件 最后部分会有: if __name__ == '__main__': TestRLSO()……………… 1)首先,这是一个判断语句. 表示执行的是此代码所在的文件.如果这个文件是作 ...
- python 中if __name__ = '__main__' 的作用
python 中if __name__ = '__main__' 的作用 前言 首先我们要知道在python里面万物皆对象,模块也是对象,并且所有的模块都有一个内置属性 __name__. 一个模块的 ...
- python中if __name__ == '__main__'是什么?
__name__和__main__认识 作用:一般用于测试程序的功能,if __name__ == '__main__':下面的代码会被执行,但当前.py文件被当做模块导入的时候,main下面的代码就 ...
- Python中if __name__ == '__main__':的作用和原理
if __name__ == '__main__':的作用 一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行. ...
- python中if __name__ == "__main__":用法解析
__name__: __name__作为模块的内置属性,简单点说呢,就是.py文件的调用方式. __main__: 如果__name__等于"__main__"就表示是直接执行. ...
- 小甲鱼第51讲:《__name__="__main__"、搜索路径和包》课后练习题
测试题: 0. __name__属性指的是在调用该模块的时候调用的函数名称,方便在模块的被调用的时候,模块内部被调用的函数不会被运行. 1. 当模块作为主程序运行的时候,__name__属性的值是“_ ...
- python中if __name__ == '__main__'
python 中__name__ = '__main__' 的作用,到底干嘛的? 有句话经典的概括了这段代码的意义: “Make a script both importable and execut ...
随机推荐
- 在代码中设置RelativeLayout布局中标签的android:layout_toLeftOf、android:layout_toRightOf等属性
需要动态改变RelativeLayout里面控件的相对位置,经一个技术群的群友提示,找到了如下的方法,做下记录: RelativeLayout.Layoutparams params = (Rel ...
- Atitit 类库冲突 解决方案
Atitit 类库冲突 解决方案 表现情况,找到不某些方法 类等,一个情况是真的找不到,一个情况是加载了错误的jar,导致正确的jar无法加载.. 1.1. 查找现在ide正在使用的jar1 1.2. ...
- 11gr2 RAC安装INS-35354问题一例
转自:http://www.askmaclean.com/archives/11gr2-rac安装ins-35354问题一例.html 今天在安装一套11.2.0.2 RAC数据库时出现了INS-35 ...
- Android遍历API (1) 动画篇——克隆动画AnimationCloning
从我学Android开始,一直就想做一件事.就是好好把APIDemo看一遍.今天开始会抽时间把Android官方的APIDemo程序全部过一遍.主要是为了两个目的:第一,复习以前学习的API用法.第二 ...
- WebService学习总结——调用第三方提供的webService服务
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据. 气象中心的管理系统将收 ...
- Java知多少(上)
Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...
- Java知多少(80)图形界面设计基础
早先程序使用最简单的输入输出方式,用户在键盘输入数据,程序将信息输出在屏幕上.现代程序要求使用图形用户界面(Graphical User Interface,GUI),界面中有菜单.按钮等,用户通过鼠 ...
- centos7目录统计之du命令
CentOS下du查看计算目录大小的命令 用法实例: [root@localhost local]# du -hs smgpdfd 3.3G smgpdfd [root@localhost lo ...
- SpringBoot整合Mail
前言 SpringBoot实现邮件功能是非常的方便快捷的,因为SpringBoot默认有starter实现了Mail. 发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息 ...
- [Math] Unconstrained & Constrained Optimization
粘贴两个典型的例子,只是基础内容,帮助理解. (1) Solution: (2) Solution: