Python __name__ 变量详解:作用、运行机制与最佳实践

今天早睡
今天早睡
发布时间:2026-10-14 | 3人浏览过
原创

本文深入解析Python中内置变量 __name__ 的核心作用。通过对比直接运行脚本与导入模块两种场景,阐明 __name__ 值在 '__main__' 与模块名之间的切换逻辑。重点讲解如何利用 if __name__ == '__main__' 语句实现代码复用与测试隔离,确保脚本既可作为独立程序执行,又能安全地被其他模块导入而不执行主逻辑。

Python __name__ 变量详解:作用、运行机制与最佳实践

前言

在编写或阅读 Python 代码时,开发者经常会在文件末尾看到一行特定的条件判断语句。


if __name__ == '__main__':
 func_name() 

这行代码的具体功能是什么?如果省略它,是否会影响程序的运行结果?

__name__

Python 内置变量与 __name__ 的查询

在 Python 中,以双下划线开头和结尾的变量被称为魔术变量或内置变量。除了 __name__ 之外,常见的还有 __init__、__dict__ 等。若要查看 Python 环境中的所有内置变量和内置函数,可以在交互界面中执行相关命令进行查询。

>>> dir(__builtins__)

执行结果如下图所示:

不同执行场景下 __name__ 的取值差异。

__name__ 在不同执行场景下的值变化

__name__ 的值并非固定不变,而是取决于脚本的执行方式。我们可以通过具体示例来观察其行为变化。

示例 0:直接运行脚本


# test.py
print(f'__name__ 在 test.py 值为 {__name__}')

首先,直接执行以下代码片段。


$ python test.py

观察终端的输出结果。


$ python test.py 
__name__ 在 test.py 值为 __main__

在此场景下,__name__ 的值被赋值为 __main__。

示例 1:模块导入场景

新建一个脚本文件 test1.py,并在其中导入之前创建的 test.py 模块。


# test1.py
import test
print(f'__name__ 在 test1.py 值为 {__name__}')

执行 test1.py 脚本,并查看控制台输出。


python test1.py 
__name__ 在 test.py 值为 test
__name__ 在 test1.py 值为 __main__

这一结果可能令人意外。整个执行流程如下所示,通过示意图可以清晰理解:

利用 __name__ 实现脚本复用与模块隔离

何时使用 __name__ 进行条件判断。

在实际开发中,我们编写的脚本往往需要具备双重身份:既可以直接运行查看结果,又可以作为模块被其他脚本导入使用。此时,利用 __name__ 进行条件判断便显得尤为重要。以下通过改造示例 1 来直观展示这一用法。

对 test.py 文件进行如下修改:


# test.py
def hello(name):
 print(f'Hello,{name}')
if __name__ == '__main__':
 hello("test")

同时更新 test1.py 文件的内容。


# test1.py
from test import hello
hello("test1")

首先尝试直接运行 test.py。此时,由于条件满足,程序会输出 Hello,test。


$ python test.py 
Hello,test

接着,如果运行 test1.py,程序将输出 Hello,test1。


$ python test1.py 
Hello,test1

若移除 if __name__ == "__main__" 及其在 test.py 中的相关逻辑,会发生什么?


$ python test1.py 
Hello,test
Hello,test1

参考资源与总结

参考资源

What does if name == “main”: do?

What's in a (Python's) name?

以上就是关于 Python __name__ 变量的详细解析。如需了解更多相关内容,请查阅本站过往文章或继续浏览后续推荐内容。感谢支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表