if condition 大于_if __name__ == #x27;__main__#x27;: 究竟起什么作用,阅读本文后,其他文章不必再看...
def
这种形式的代码,相信你已经见过很多,在脚本的末尾,出现一个if条件判断,这个if条件判断的作用是什么呢, __name__ 事先并没有定义,为什么可以直接使用呢,它从哪里来? 回答这些问题,必须先了解模块属性
1、模块属性
一个python脚本(以.py 结尾的文件)就是一个模块,模块自身有若干属性,其中比较常用的是如下两个
1. __name__ 模块的名称
2. __file__ 脚本的完整文件路径
在任意一个python脚本里,你都可以输出这两个属性
print(__name__)
print(__file__)
得到结果
__main__
/Users/zhangdongsheng/experiment/test/test.py
__name__ 的值是 __main__ ,这表示模块的名称是__main__
__file__ 是文件的完整路径
虽然弄清楚了__name__ 是怎么一回事,但也带来了新的疑问,明明__name__ 就等于 __main__ ,为何还要做if条件判断呢?显然是存在 __name__ 不等于__main__ 的情况。
2、直接执行与其他模块引入
简单的功能,我们可以在一个python脚本里完成,但复杂的功能,我们会写多个python 脚本,比如下面的例子里,有两个脚本,一个是main.py ,做为整个程序的启动脚本,utils.py 提供一些辅助函数,供main.py使用
(1)utils.py
def
(2)main.py
from
接下来,通过两步实验,来理解 __name__ 在不同场景下的取值情况。
第一步,先来执行utils.py文件
python utils.py
执行结果为
utils 模块里的__name__ 值为: __main__
第二步,执行main.py
python main.py
执行结果为
utils 模块里的__name__ 值为: utils
输入两个整数,中间用空格分开:5 2
2.5
这里有一个现象,你必须理解其背后的原因,我们明明执行的main.py脚本,但是utils.py脚本里的代码也被执行了,这是因为在main.py脚本里引入了utils.py 这个模块,被引入的脚本里的代码会在引入时执行。
当utils.py 被其他脚本引入时,它的__name__ 就不等于__main__, 而是等于utils,恰好是文件名称去掉.py 剩余的部分。
经过上面的实验,我们可以得出两个结论
1. 当脚本被直接执行时,模块属性__name__ 等于__main__
2. 当脚本被其他模块引入时,模块属性__name__ 等于脚本名称去掉.py 后剩余的部分
3、终极目的---测试模块里函数
由于一个脚本被引入时,自身的代码会被执行,因此我们在每个脚本里都写上一段if __name__ == '__main__': 如果你希望一些代码只有在脚本被直接执行时才执行,那么就把这些代码放入到if 语句块中,最常见的情形就是测试代码,下面我对utils.py 进行修改
def
我们写完一个函数后,不免要写一些测试的代码,而这些测试的代码我们不希望他们在utils.py被引入时执行,只有当我们主动执行utils.py 进行测试才执行这些测试代码
扫一扫,更多专业python技术分享
if condition 大于_if __name__ == #x27;__main__#x27;: 究竟起什么作用,阅读本文后,其他文章不必再看...相关推荐
- if __name__ == __main___Python的if __name__==#x27;__main__#x27;你都懂了吗
背景 在Python当中,如果代码写得规范一些,通常会写上一句"if __name__=='__main__:"作为程序的入口,但似乎没有这么一句代码,程序也能正常运行.这句代码多 ...
- if __name__ == __main___python中 __name__ == #x27;__main__#x27; 有什么作用?
python中if __name__ == '__main__' 的作用,到底干嘛的? 有句话经典的概括了这段代码的意义: "Make a script both importable an ...
- Python中的__name__和__main__含义详解
背景 在写Python代码和看Python代码时,我们常常可以看到这样的代码: ? 1 2 3 4 5 def main(): ...... if __name__ == "__ma ...
- if函数python作用_if __name__== __main__ 的意思(作用)python代码复用
模块是对象,并且所有的模块都有一个内置属性 __name__.一个模块的 __name__ 的值取决于您如何应用模块.如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带 ...
- if test 多条件_秒懂Python编程中的if __name__ == #x27;main#x27; 作用和原理
在大多数编排得好一点的脚本或者程序里面都有这段 if __name__ == 'main': 1 这段代码的功能 一个python的文件有两种使用的方法: 第一是直接作为脚本执行, 第二是import ...
- if __name__ == __main___终于搞懂了Python脚本里的if __name__ == #39;__main__#39;
经常在Python脚本的最后看到有这样的语句: if __name__ == '__main__': main() 那么这是什么意思呢? __name__是什么? __name__是当前模块(脚本文件 ...
- if __name__ == __main___一文带你弄懂python中if __name__ == #39;__main__#39;
我们在python模块那章节的学习,有所接触到if __name__ == '__main__'这个概念.当时我们只是大概描述了一番,不少伙伴还是有所困惑,今天就让我们通过实际例子去讲解这条语句到底有 ...
- if __name__ == __main___一文搞懂 if __name__ == #39;__main__#39;
生信必备的Python入门到进阶干货,已整理在菜单栏,敬请查阅 在写Python脚本时,总会遇到 if __name__ == '__main__',生信背景的我们有必要了解这个是啥. 举个例子,新建 ...
- if condition 大于_小函数,大用处!巧用AND函数,避开IF函数嵌套
大家好,今天带来的是AND函数运算. 一:AND函数和语法结构 AND函数也成为与函数,它是指对多个条件进行同时判定,当所有条件都满足时,返回成立,也就是TRUE,否则返回不成立,也就是FALSE. ...
最新文章
- java ajax上传文件图片以json形式返回
- Linux安装ansible自动化运维工具
- 技嘉主板GA-B85M-D3V PLUS 1150组装问题汇总
- C++,string类的指针,string类数组的指针 string *s
- JavaScript学习笔记:创建、添加与删除节点
- Ubuntu18.04配置ork(ecto、ecto_image_pipeline、ecto_opencv、ork_reconstruction)
- 计算机多余自动启动项,去掉多余的开机启动项
- 用Java代码实现学生管理系统
- lept_json的学习之stringify
- 【每日一练】JS基础选择题
- jQuery对象,jQuery查找标签,层级选择器,属性选择器,表单筛选器,操作节点标签事件...
- Logic Pro X for Mac(音乐制作软件)
- 01.奇特的一生——柳比歇夫一生的秘密
- 串口的使用–蓝牙模块
- 计算机培训教学准备,计算机教学计划锦集五篇
- 全网清晰虚拟机安装截图
- 那些年啊,那些事——一个程序员的奋斗史 ——73
- 京东 探索星球瓜分 1000 亿京豆 脚本
- display:table-cell布局
- mod在计算机导论中是什么意思,计算机导论ppt课件
热门文章
- Qt智能指针--QWeakPointer
- c++层次遍历_动画:二叉树遍历的多种姿势
- 关于嵌入式系统内存地址空间的一些疑问(.text、.data、.bass、堆\栈空间)
- 没有qpress_关于网站没反应的阿里云帮助中心问题解答
- VMware / 三种联网方法及原理
- OS / Linux / 进程的虚拟地址空间布局
- java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码
- 中两个查询结果相减_MySQL 在查询结果中插入伪行
- centos php 开启socket,centos下phpsocket连接,该如何解决
- git 如何同步本地tag与远程tag