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;: 究竟起什么作用,阅读本文后,其他文章不必再看...相关推荐

  1. if __name__ == __main___Python的if __name__==#x27;__main__#x27;你都懂了吗

    背景 在Python当中,如果代码写得规范一些,通常会写上一句"if __name__=='__main__:"作为程序的入口,但似乎没有这么一句代码,程序也能正常运行.这句代码多 ...

  2. if __name__ == __main___python中 __name__ == #x27;__main__#x27; 有什么作用?

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

  3. Python中的__name__和__main__含义详解

    背景 在写Python代码和看Python代码时,我们常常可以看到这样的代码: ? 1 2 3 4 5 def main():     ...... if __name__ == "__ma ...

  4. if函数python作用_if __name__== __main__ 的意思(作用)python代码复用

    模块是对象,并且所有的模块都有一个内置属性 __name__.一个模块的 __name__ 的值取决于您如何应用模块.如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带 ...

  5. if test 多条件_秒懂Python编程中的if __name__ == #x27;main#x27; 作用和原理

    在大多数编排得好一点的脚本或者程序里面都有这段 if __name__ == 'main': 1 这段代码的功能 一个python的文件有两种使用的方法: 第一是直接作为脚本执行, 第二是import ...

  6. if __name__ == __main___终于搞懂了Python脚本里的if __name__ == #39;__main__#39;

    经常在Python脚本的最后看到有这样的语句: if __name__ == '__main__': main() 那么这是什么意思呢? __name__是什么? __name__是当前模块(脚本文件 ...

  7. if __name__ == __main___一文带你弄懂python中if __name__ == #39;__main__#39;

    我们在python模块那章节的学习,有所接触到if __name__ == '__main__'这个概念.当时我们只是大概描述了一番,不少伙伴还是有所困惑,今天就让我们通过实际例子去讲解这条语句到底有 ...

  8. if __name__ == __main___一文搞懂 if __name__ == #39;__main__#39;

    生信必备的Python入门到进阶干货,已整理在菜单栏,敬请查阅 在写Python脚本时,总会遇到 if __name__ == '__main__',生信背景的我们有必要了解这个是啥. 举个例子,新建 ...

  9. if condition 大于_小函数,大用处!巧用AND函数,避开IF函数嵌套

    大家好,今天带来的是AND函数运算. 一:AND函数和语法结构 AND函数也成为与函数,它是指对多个条件进行同时判定,当所有条件都满足时,返回成立,也就是TRUE,否则返回不成立,也就是FALSE. ...

最新文章

  1. java ajax上传文件图片以json形式返回
  2. Linux安装ansible自动化运维工具
  3. 技嘉主板GA-B85M-D3V PLUS 1150组装问题汇总
  4. C++,string类的指针,string类数组的指针 string *s
  5. JavaScript学习笔记:创建、添加与删除节点
  6. Ubuntu18.04配置ork(ecto、ecto_image_pipeline、ecto_opencv、ork_reconstruction)
  7. 计算机多余自动启动项,去掉多余的开机启动项
  8. 用Java代码实现学生管理系统
  9. lept_json的学习之stringify
  10. 【每日一练】JS基础选择题
  11. jQuery对象,jQuery查找标签,层级选择器,属性选择器,表单筛选器,操作节点标签事件...
  12. Logic Pro X for Mac(音乐制作软件)
  13. 01.奇特的一生——柳比歇夫一生的秘密
  14. 串口的使用–蓝牙模块
  15. 计算机培训教学准备,计算机教学计划锦集五篇
  16. 全网清晰虚拟机安装截图
  17. 那些年啊,那些事——一个程序员的奋斗史 ——73
  18. 京东 探索星球瓜分 1000 亿京豆 脚本
  19. display:table-cell布局
  20. mod在计算机导论中是什么意思,计算机导论ppt课件

热门文章

  1. Qt智能指针--QWeakPointer
  2. c++层次遍历_动画:二叉树遍历的多种姿势
  3. 关于嵌入式系统内存地址空间的一些疑问(.text、.data、.bass、堆\栈空间)
  4. 没有qpress_关于网站没反应的阿里云帮助中心问题解答
  5. VMware / 三种联网方法及原理
  6. OS / Linux / 进程的虚拟地址空间布局
  7. java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码
  8. 中两个查询结果相减_MySQL 在查询结果中插入伪行
  9. centos php 开启socket,centos下phpsocket连接,该如何解决
  10. git 如何同步本地tag与远程tag