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 ...
随机推荐
- golang:mime.Decode、mime.DecodeHeader
最近在做邮件解析的相关工作,在使用mime.Decode/mime.DecodeHeader时有些疑问. 有些搞不懂mime.Encode和mime.EncodeHeader的区别.
- linux下yum安装最新稳定版nginx
## 摘抄nginx官网文档 URL:http://nginx.org/en/linux_packages.html#stable To set up the yum repository for R ...
- apk MIME类型
MIME (Multipurpose Internet Mail Extensions) 多用途互联网邮件扩展,它设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器 ...
- Oracle Enterprise Linux 6.4 下配置vncserver
① 安装vncserveryum install tigervnc-server ② 配置/etc/sysconfig/vncservers 配置参数 # VNCSERVERS="2 ...
- jdk和tomcat基本配置
问题:前端采用grunt构建,后台采用java编写使用Eclipse或IntelliJ,把Tomcat嵌入到开发工具当中.问题一:在于是grunt编译之后生成的文件,每次都需要刷新项目文件夹,然后在刷 ...
- [Python] 01 - Number
故事背景 一.大纲 如下,chapter4 是个概览,之后才是具体讲解. 二. 编译过程 Ref: http://www.dsf.unica.it/~fiore/LearningPython.pdf
- 8 -- 深入使用Spring -- 5...2 使用@Cacheable执行缓存
8.5.2 使用@Cacheable执行缓存 @Cacheable可用于修饰类或修饰方法,当使用@Cacheable修饰类时,用于告诉Spring在类级别上进行缓存 ------ 程序调用该类的实例的 ...
- 【代码审计】XYHCMS V3.5任意文件删除漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
- lua_tinker源码笔记1
本篇仅简单介绍使用lua_tinker让lua调用C++函数的过程, C++调用lua函数可以参见博客Lua脚本和C++交互(一). 未完待续. (一) lua调用C++全局函数 这里以lua_tin ...
- fs项目---->cron框架的学习(一)
Cron是一种允许您按计划执行某些内容的工具.这通常使用cron语法来完成.我们允许您在计划作业触发时执行函数.我们还允许您使用子进程执行javascript进程外部的作业.此外,这个库超出了基本的c ...