相信大家在看别人的python程序时,可能会在大部分的程序后看到标题这段代码,这里解释下它的意义。总的来说,这句代码的作用就是既能保证当前的.py文件直接运行,也能保证其可以作为模块被其他.py文件导入。

下面我将通过几个例子帮助大家理解

demo1.py

  

# encoding=utf-8
# -*- coding: UTF-8 -*- # print(__name__)

输出结果:

查看类型:

这说明__name__本身其实就是一个变量,不过比较特殊。

实际上,它是在程序执行前就被创建并赋值的,而赋值的机制是这里的关键。

在当前程序被当作主程序运行时, __ name__被自动赋值为固定的字符串__main__;

当它被当作模块被其他文件调用时,自动被赋值为模块所在的文件名。

对于以下demo2.py代码:

def printhello():
print("Hello World")
print(__name__) if __name__ == '__main__':
printhello()

输出的结果为:

Hello World

__main__

因为此时上述代码没有在其他程序中作为模块导入,而是直接执行的,所以 __name__变量被赋值为"__main__"   ;

其实上述带有if判断的代码和下述demo_f.py 代码执行结果相同:

def printhello():
print("Hello World")
print(__name__) printhello()

可见这句if判断代码的作用就是既能保证当前的.py文件直接运行,也能保证其可以作为模块被其他.py文件导入。所以它也可以在当前文件被当作一个模块导入时发挥关键作用。

但当其不要判断语句且它被作为模块导入时,输出的结果可能就与大家想的有点偏差了。

from demo_f import printhello

printhello()

程序执行输出的结果为:

Hello World
demo_f
Hello World
demo_f

首先,可以看到p_l.py在被作为模块调入时,对应的__name__被赋值为对应的文件名

虽然只运行了一遍demo_f.py文件,但我们可以发现函数执行了两次

这是因为,不带判断语句的demo_f.py文件作为模块被引入时,printhello函数已经自动执行了一次,之后在4.py被主动调用时执行了一次,所以一共执行两次。
那么,此带if判断的代码的作用已经十分清楚了,它保证模块文件的函数既能在模块文件单独执行,又能保证它被其它.py文件导入时,相应的函数不会执行两次。

————————(我是分割线)————————

参考:

1. https://blog.csdn.net/forever_wen/article/details/84787021

备注:

初次编辑时间:2019年10月5日14:25:15

环境:Windows 7   / Python 3.7.2

【Python】if __name__ == '__main__' 含义解析的更多相关文章

  1. 对于python的__name__="__main__"的含义的理解

    学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main ...

  2. 浅析python 中__name__ = '__main__' 的作用

    引用http://www.jb51.net/article/51892.htm 很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码 ...

  3. 【转】浅析python 中__name__ = '__main__' 的作用

    原文链接:http://www.jb51.net/article/51892.htm 举例说明解释的非常清楚,应该是看到的类似博文里面最简单的一篇: 这篇文章主要介绍了python 中__name__ ...

  4. 002_浅析python 中__name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

  5. 理解 python 中__name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

  6. python的__name__ == \'__main__\' 意义

    转自http://www.jb51.net/article/51892.htm 很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码 ...

  7. 【Python中if __name__ == '__main__': 的解析】

    在很多Python代码中,在代码的最下方会看到  if __name__ == '__main__':,这段代码到底有什么用呢? 在理解这个语句的作用前,需要知道的是,一般的Python文件后缀为.p ...

  8. Python常见经典 python中if __name__ == '__main__': 的解析

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...

  9. Python if __name__ == "__main__" 的含义

    一.概念 我们在Python中经常可以看到一个程序会有if __name__ == "__main__",同时这通常是写在程序的入口位置,那么他有什么特殊含义呢?在了解这个之前,我 ...

随机推荐

  1. hdu 4998 Rotate 点的旋转 银牌题

    Rotate Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  2. linux如何查看ip地址

    使用命令: ifconfig -a 例如:

  3. 集合家族——ArrayList

    一.概述: ArrayList 是实现 List 接口的动态数组,所谓动态就是它的大小是可变的.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些 ...

  4. 作为新手对于初次接触matlab的一些感受。

    使用matlab时的个人感受:1.建立一个matlab的M文件函数function xxx=aaa(b,c,d) 其中返回值为xxx,函数名为aaa,函数变量为b,c,d 要将其写在一个M文件之中,并 ...

  5. FatMouse's Speed

    J - FatMouse's Speed DP的题写得多了慢慢也有了思路,虽然也还只是很简单的DP. 因为需要输出所有选择的老鼠,所以刚开始的时候想利用状态压缩来储存所选择的老鼠,后面才发现n太大1& ...

  6. lyc——2019.10.31

    10:判决素数个数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入两个整数X和Y,输出两者之间的素数个数(包括X和Y). 输入 两个整数X和Y(1 <= X,Y <= ...

  7. Raspberry Pi 4B基本设置

    目录 一.SSH登录Raspberry Pi 二.开启VNC服务 三.将SD卡分区扩展 四.修改软件源 一.SSH登录Raspberry Pi 完成系统烧录后,就需要登录Raspberry Pi,此时 ...

  8. 3.rabbitmq--发布订阅模式

    rabbitmq-----发布订阅模式  模型组成 一个消费者Producer,一个交换机Exchange,多个消息队列Queue,多个消费者Consumer 一个生产者,多个消费者,每一个消费者都有 ...

  9. 胜利点 final发布

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/10062 1.视频地址:https://www.bilibili.com/ ...

  10. No hash for parcel CDH-XXX.parcel.torrent

    在安装 CDH 时,到 Install Parcels 这一步,分发 Parcels 一直过不去,界面一直报 Failure due to stall on seeded torrent,查看日志一直 ...