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

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

  • 一、Python中变量和方法中的双下划线
  • 二、Python脚本运行的两种方式,以及`__name__`在不同运行方式下的变化
  • 三、具体的实例分析
  • 欢迎学习交流!
    邮箱: 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中类、对象、方法、函数和属性的区别和理解
  • 二、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__':只有在直接运行该当前脚本时才会生效,而当被其他脚本调用时,这部分代码块失效。

    来源:独不懂

    物联沃分享整理
    物联沃-IOTWORD物联网 » 关于Python 中 常见语句 if__name__ == ‘__main__‘: 的理解

    发表评论