深入理解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__‘内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3+PyQt5自定义视图详解

    python3+PyQt5自定义视图详解

    这篇文章主要为大家详细介绍了python3+PyQt5自定义视图的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Python进阶篇之字典操作总结

    Python进阶篇之字典操作总结

    字典是Python语言中唯一的映射类型。字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。在学习了 Python 基本的字典操作后,通过学习本文的这些进阶操作,让写出的代码更加优雅简洁和pythonic。下面来一起看看吧。
    2016-11-11
  • Python如何实用File文件的实现

    Python如何实用File文件的实现

    本文主要介绍了Python如何实用File文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 利用python生成一个终极复杂的跳动小红心动画

    利用python生成一个终极复杂的跳动小红心动画

    这篇文章主要为大家详细介绍了一个使用Python内置turtle模块实现的跳动爱心动画特效,无需安装任何第三方库,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-03-03
  • 彻底搞懂python 迭代器和生成器

    彻底搞懂python 迭代器和生成器

    这篇文章主要介绍了python 迭代器和生成器的相关资料,文中讲解非常细致,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • python串口如何读取byte类型数据并访问

    python串口如何读取byte类型数据并访问

    这篇文章主要介绍了python串口如何读取byte类型数据并访问方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Python深入学习之对象的属性

    Python深入学习之对象的属性

    这篇文章主要介绍了Python深入学习之对象的属性,本文从较深的层次讲解对象属性的内部运行方式,需要的朋友可以参考下
    2014-08-08
  • Python(Pandas、Dask、PySpark等库)在大数据处理中的学习心得

    Python(Pandas、Dask、PySpark等库)在大数据处理中的学习心得

    作者分享了他对Python在大数据处理中的学习心得,介绍了大数据的概念、特点及处理挑战,讨论了Python的优势及常用的大数据处理库,比较了Python与Rust在大数据处理中的优劣,并提出了大数据处理的最佳实践
    2026-04-04
  • Python中pytest命令行实现环境切换

    Python中pytest命令行实现环境切换

    在自动化测试过程中经常需要在不同的环境下进行测试验证,所以写自动化测试代码时需要考虑不同环境切换的情况,本文主要介绍了Python中pytest命令行实现环境切换,感兴趣的可以了解一下
    2023-07-07
  • Python生产者与消费者模型中的优势介绍

    Python生产者与消费者模型中的优势介绍

    这篇文章主要介绍了python多进程中的生产者和消费者模型优势,生产者是指生产数据的任务,消费者是指消费数据的任务。当生产者的生产能力远大于消费者的消费能力,生产者就需要等消费者消费完才能继续生产新的数据
    2023-03-03

最新评论