关于Python 中 常见语句 if__name__ == ‘__main__‘: 的理解

欢迎学习交流!
邮箱: z…@1…6.com
网站: https://zephyrhours.github.io/

在学习别人共享的python代码时,经常会在脚本后面看到如下的代码块:

if__name__ == '__main__':

笔者在学习中也经常对此语句感到困惑,看完网上一些关于对这个语句解释的博文,也总是阅读完了不理解,反而变得更困惑

下面说一下笔者对这个语句的通俗理解,希望对您的学习工作有所帮助。

一、Python中变量和方法中的双下划线

进行详细解释前,首先需要对这个语句中包含的__name____main__进行简单的介绍。

在python中,经常会见到带有双下滑线的变量和方法,如常见的:

  • __future__
  • __all__
  • __version__
  • __author__
  • __name__

其实这类方法被称为python的魔法函数,可以理解为python内的私有方法,我们不能通过外部调用对其属性进行修改。通俗理解就是:这里的__name__是python内置的方法,每个脚本都有,其实就是当前脚本的名称。

注意: 如果对这些混淆概念不太清楚,具体关于对象,类,方法,函数,属性的区别和理解,请看笔者博客:

二、Python脚本运行的两种方式,以及__name__在不同运行方式下的变化

基于python编写的脚本运行方式有两种:

  • 直接运行
  • 被其他脚本调用

在不同的运行方式下,__name__也会随之发上变化,具体如下:

  • 当直接运行时:__name__==__main__
  • 当被其他脚本调用时: __name__==脚本名称

讲到这里,这个问题就显得很清楚了, 通俗的理解就是: 只有在脚本单独运行时,代码块 if__name__ == '__main__': 才会运行,当该脚本中的方法、类被其他脚本调用时,代码块 if__name__ == '__main__': 将会失效。

为了更清楚的理解,下面来看具体的实例分析。

三、具体的实例分析

下面给出具体的实例分析,静下心来把下面这个案例看懂,应该就彻底理解了这行代码的含义。

首先我们先在Test文件夹下定义两个python脚本文件,名称为:

  • demo1.py
  • demo2.py
    文件夹的具体结构如下,
    在这里插入图片描述
    然后我们首先对demo1.py脚本文件进行分析,其内部代码如下:
print('__name__:',__name__)

print('hello, this is one!')

if __name__ == '__main__':
    print('hello, this is two!')
    print('running this part')

直接运行该脚本,具体运行结果如下:
在这里插入图片描述
从这里可以看到,当直接单独运行该脚本demo1.py时,它的名称为__main__,此时,该脚本中的函数print('__name__:',__name__)print('hello, this is one!')在运行完成后,后面的代码块

if __name__ == '__main__':
    print('hello, this is two!')
    print('running this part')

的内部的方法, print('hello, this is two!')print('running this part')也参与了运行。

下面定义脚本demo2.py,具体代码如下:

import demo1

print('This is demo2.py')

当脚本demo1.py被脚本demo2.py调用时,运行结果如下:
在这里插入图片描述

可以看到:

  • 当在脚本demo2.py中调用脚本demo1.py时,它的名称由原来直接运行demo1.py时的 '__main__'变成了demo1
  • 此时,脚本demo1.py中的代码if __name__ == '__main__':条件不成立,所以其后面的函数print('hello, this is two!')print('running this part')也将不会被执行。

总结:
脚本函数中的代码块if __name__ == '__main__':只有在直接运行该当前脚本时才会生效,而当被其他脚本调用时,这部分代码块失效。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值