我们在python模块那章节的学习,有所接触到if __name__ == '__main__'这个概念。当时我们只是大概描述了一番,不少伙伴还是有所困惑,今天就让我们通过实际例子去讲解这条语句到底有何含义。一个python文件有两种用途,一种被当主程序、脚本执行,另一种被当模块导入,为了区别同一个文件的不同用途,每个py文件都内置了__name__变量,该变量在py文件被当做脚本执行时赋值为“__main__”,在py文件被当做模块导入时赋值为模块名。

如模块my_module.py中,可以在文件末尾基于__name__在不同应用场景下值的不同来控制文件执行不同的逻辑,如下所示:

#encoding:UTF-8#本文件为:my_module.py...if __name__ == '__main__':    my_module.py被当做脚本执行else:    my_module.py被当做模块导入时执行

首先建立一个python文件,如test1.py,文件代码如下所示:

#encoding:UTF-8#本文件名为:test1.pydef print_hello():    print("欢迎关注公众号:浩道linux")print("本公众号给大家分享最有趣最实用的linux、python知识!")#打印__name__的值print(__name__)if __name__ == '__main__':    print("test1.py当做脚本执行执行!!!")else:    print("test1.py被当做模块导入时执行。。。")

运行以上代码,结果如下所示:

从结果看出,当执行test1.py本身文件时,变量__name__的值为__main__。

其次,再创建一个python文件,如test2.py,文件代码如下:

#encoding:UTF-8#本文件名为:test2.py#导入模块test1import test1test1.print_hello()print("代码执行结束********")

执行test2.py文件,结果如下所示:

通过模块那篇知识的学习,不难看出test2.py所执行原理以及结果。当test1.py被当成模块导入时,__name__的值由__main__变成了test1。

相信通过这两个例子的比较,已经弄懂if __name__ == '__main__'的用法了吧。用到该语句的场景一般就是我们写完一个函数代码,自己想调用执行测试,而又不希望自己写的代码被当成模块导入时,执行我们的测试代码。大家如果还有疑问,可以留言讨论,希望能给大家带来解惑。

往期内容回顾:

干货之六:python常见面试题,你会多少?

平时你输入的验证码,竟是这么简单就实现了

python常见模块之time模块

python实战项目之---童年小游戏(附源码)

if __name__ == __main___一文带你弄懂python中if __name__ == #39;__main__#39;相关推荐

  1. 一文带你弄懂C++中的ANSI、Unicode和UTF8三种字符编码及相互转换

    目录 1.概述 2.Visual Studio中的字符编码 3.ANSI窄字节编码 4.Unicode宽字节编码 5.UTF8编码

  2. 一文带你弄懂Visual Studio:运行时库及MT/MTD、MD/MDD

    一文带你弄懂Visual Studio:运行时库及MT/MTD.MD/MDD 引子 什么是Runtime Library? Runtime Library和运行库 MT MTD MD MDD的关系 静 ...

  3. 彻底弄懂Python中的GIL锁

    彻底弄懂Python中的GIL锁 转载:https://blog.csdn.net/yushuaigee/article/details/86537474 刚学习python时,我关注了许多介绍pyt ...

  4. 一文弄懂Python中的 if __name__ == __main__

    1. 引言 在Python相关代码中,我们经常会遇到如下代码段: # stuff if __name__ == "__main__":# do stuff 本文将尽可能使用简单的样 ...

  5. 一文弄懂python中的函数(自定义函数,匿名函数,高阶函数与解析式)

    什么是函数,如何在 Python 程序中定义函数呢? 说白了,函数就是为了实现某一功能的代码段,只要写好以后,就可以重复利用. python中的自定义函数 Python 的函数具有非常灵活多样的参数形 ...

  6. 一篇文章带你搞懂Python中的类

    前言 今天我们要说的是面向对象的核心-----类,类能帮我们把复杂的事情变得有条理,有顺序,希望大家通过学习类能改善自己的编码风格,使代码变得更为好看,更加通俗易懂. 1.类的用法 一.什么是类 类( ...

  7. python 结构体数组 定义_一篇文章弄懂Python中所有数组数据类型

    前言 数组类型是各种编程语言中基本的数组结构了,本文来盘点下Python中各种"数组"类型的实现. list tuple array.array str bytes bytearr ...

  8. bytes数组转string指定编码_一篇文章弄懂Python中所有数组数据类型

    前言 数组类型是各种编程语言中基本的数组结构了,本文来盘点下Python中各种"数组"类型的实现. list tuple array.array str bytes bytearr ...

  9. 一文带你弄懂普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

    Prim算法 Prim算法用于构造最小生成树,且适用于稠密图. 基本思想 : 归并顶点 设连通网络 N = { V, E } 从某顶点 u0 出发, 选择与它关联的具有最小权值的边(u0, v), 将 ...

最新文章

  1. 如何有效编写软件的75条建议
  2. Fade 数字切换动效
  3. Exchange2003 OWA 将HTTPS转为HTTP访问!〖罗斌个人工作经验谈〗
  4. tomcat mysql 启动顺序_linux 上配置tomcat、mysql 开机启动
  5. 利用JS脚本快速删除百度网盘同一目录下的不需要文件(可以参考这个方法删除重复文件)
  6. 【NOIP2017】逛公园【最短路DAG】【dp】【拓扑排序】
  7. python postmessage 鼠标_SilkTest高级进阶系列7-用PostMessage模拟鼠标
  8. 有PHP4的分支吗?
  9. 华为诺亚方舟 | 构建1亿组图文对中文多模态数据集
  10. druid Approximate Histograms
  11. 曲折中前行的汉语编程
  12. 控制台程序实现暂停功能
  13. hdu5294(Tricks Device)题解
  14. Android源码编译过程及刷机过程详解
  15. 操作系统OS-采用分段式存储管理不会产生内部碎片
  16. 浅谈Linux PMIC驱动(一)
  17. Python版实现12306抢票功能,真的能帮你抢到春运回家的票吗?
  18. 网易即时通讯云平台99.99%可靠性的运维经验谈
  19. 初识C语言之函数封装篇——带你嗅探万花从中的清香(上)
  20. I帧、P帧、B帧、IDR 关键帧介绍

热门文章

  1. springboot整合mybatisplus中@Mapper与@MapperScan的使用
  2. spring boot配置tomcat部署
  3. 有关家居产品设计的外国专著_为啥外国的二手家具被称为vintage,中国就叫破烂?差在哪儿了?...
  4. 眉骨高者为大贵之相_男人此处“高大”,大富大贵,前途不可限量!!
  5. android 获取蓝牙设备id_【报Bug】安卓平台获取不到蓝牙设备服务列表(ios可以)...
  6. Android日志[进阶篇]一-使用 Logcat 写入和查看日志
  7. Java并发编程实战————Semaphore信号量的使用浅析
  8. html 自定义打印模板,HTML+CSS入门 自定义模板详解
  9. python range 步长为负数_【Python面试】 说说Python中xrange和range的区别?
  10. ladp3 获取属性_Ldap3库使用方法(四)