深入理解python中if __name__ == ‘__main__‘

 更新时间:2023年08月24日 11:26:45   作者:禾达达  
很多python的文件中会有语句if __name=='__main__':,一直不太明白,最近查阅了一下资料,现在明白,本文就来深入理解一下,感兴趣的可以了解一下

1. 一个简单的例子

先来看一份代码:

# test.py
def addFunc(a, b):
    return a + b
print('the result of test is: 1 + 1 = ', addFunc(1, 1))
# mode.py
import test
print('The result of test modula is :', test.addFunc(12, 23))

执行 mode.py 输出如下:

the result of test is: 1 + 1 =  2
The result of test modula is : 35

这里输出的语句中,同时包含了 test.py 和 mode.py 中的内容。那么问题来了,很多时候调用者并不需要输出 test.py 里面的内容,这个时候应该怎么处理呢?添加另外一个不输出的版本 test_no_print.py ?
python 中提供了 __name__ 这个系统变量来解决这个问题,先看修改后的代码:

# test.py
def addFunc(a, b):
    return a + b
if __name__ == '__main__':
    print('the result of test is: 1 + 1 = ', addFunc(1, 1))

单独执行 test.py 结果如下:

the result of test is: 1 + 1 =  2

没有问题,这是我们想要的结果。
执行 mode.py:

The result of test modula is : 35

这恰恰也是我们想要的结果。
那么问题来了,__name__ 里面究竟是个什么神奇的值?

2. __name__ 的值

修改 test.py 如下使其输出 __name__ 的值:

# test.py
def addFunc(a, b):
    return a + b
if __name__ == '__main__':
    print('the result of test is: 1 + 1 = ', addFunc(1, 1))
print("The value of '__name__' is ", __name__)

分别执行 test.py 和 mode.py 结果如下:

the result of test is: 1 + 1 =  2
The value of '__name__' is  __main__

The value of '__name__' is  test
The result of test modula is : 35

可以看到,单独执行 test.py 时,__name__ 的值是 ‘__main__’,而作为模块被 import 到其他文件中调用时,__name__ 的值则是模块的名字。

我们知道,有两种方法可以使用 python 文件来执行它实现的功能,一个是直接运行,一个是被其他文件导入后调用。当它被直接运行时,当前文件就是程序的主入口,这相当于 C 或者 Java 中的 main 函数。当它被其他文件导入调用时,程序的入口自然在其他文件中。

__name__ 是 python 的内置属性,这个系统全局变量用来表示当前模块的名字。而 __main__ 就是一个代表程序入口的字符串。 因此 if __name__ == ‘__main__’ 其实就是判断程序的入口是不是当前的文件!

到此这篇关于深入理解python中if __name__ == ‘__main__‘的文章就介绍到这了,更多相关python if __name__ == ‘__main__‘内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Flask模拟实现CSRF攻击的方法

    Flask模拟实现CSRF攻击的方法

    这篇文章主要介绍了Flask模拟实现CSRF攻击的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 用Python展示动态规则法用以解决重叠子问题的示例

    用Python展示动态规则法用以解决重叠子问题的示例

    这篇文章主要介绍了用Python展示动态规则法用以解决重叠子问题的一个棋盘游戏的示例,动态规划常常适用于有重叠子问题和最优子结构性质的问题,且耗时间往往远少于朴素解法,需要的朋友可以参考下
    2015-04-04
  • Python大数据用Numpy Array的原因解读

    Python大数据用Numpy Array的原因解读

    一个Numpy数组由许多值组成,所有值的类型是相同的,Numpy 是Python科学计算的一个核心模块,本文重点给大家介绍Python大数据Numpy Array的相关知识,感兴趣的朋友一起看看吧
    2022-02-02
  • python pip安装的包目录(site-packages目录的位置)

    python pip安装的包目录(site-packages目录的位置)

    这篇文章主要介绍了python pip安装的包放在哪里(site-packages目录的位置),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • python之wxPython应用实例

    python之wxPython应用实例

    这篇文章主要介绍了python之wxPython应用实例,以加载图片为例讲述了wxPython的用法,非常具有实用价值,需要的朋友可以参考下
    2014-09-09
  • python操作配置文件实战记录

    python操作配置文件实战记录

    这篇文章主要给大家介绍了关于python操作配置文件的相关资料,配置文件是为程序配置参数和初始设置的文件,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Python的Flask路由实现实例代码

    Python的Flask路由实现实例代码

    这篇文章主要介绍了Python的Flask路由实现实例代码,在启动程序时,python解释器会从上到下对代码进行解释,当遇到装饰器时,会执行,并把函数对应的路由以字典的形式进行存储,当请求到来时,即可根据路由查找对应要执行的函数方法,需要的朋友可以参考下
    2023-08-08
  • Python实战之实现截图识别文字

    Python实战之实现截图识别文字

    本文主要介绍了通过python实现截图识别图中文字的功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以学习一下
    2021-11-11
  • django执行原生SQL查询的实现

    django执行原生SQL查询的实现

    本文主要介绍了django执行原生SQL查询的实现,主要有两种方法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • python分析网页上所有超链接的方法

    python分析网页上所有超链接的方法

    这篇文章主要介绍了python分析网页上所有超链接的方法,涉及Python使用urllib模块操作页面超链接的技巧,需要的朋友可以参考下
    2015-05-05

最新评论