You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中if __name__ == '__main__'运行原理及导入模块时执行问题求解

首先澄清认知偏差:你提到的「导入name_function模块时触发test_name_function的if代码块」是错误的,该代码块的触发和导入name_function没有任何关联,触发原因是你直接把test_name_function.py作为入口脚本运行了。

__name__ 变量的运行逻辑

Python 解释器处理任意 .py 文件时,都会自动为该模块生成内置变量 __name__,取值遵循两个固定规则:

  • 当你直接运行某个 .py 文件作为程序入口时,该文件的 __name__ 会被赋值为固定字符串 '__main__'
  • 当你在其他代码中通过 import 导入某个 .py 模块时,被导入模块的 __name__ 会被赋值为它的文件名(不含 .py 后缀)

if __name__ == '__main__' 的作用就是判断当前模块是否作为入口脚本被直接运行,只有条件成立时才会执行代码块内的逻辑。

现象的具体原因

你现在是直接运行 test_name_function.py 文件,所以该文件的 __name__ 取值就是 '__main__',自然会满足判断条件,执行 unittest.main() 启动单元测试。
你导入 get_formatted_name 只是 test 文件中的普通业务代码,和 if 块的触发没有关联:哪怕你把这行导入语句完全删掉,只要直接运行这个 test 文件,if 代码块依然会执行。
反过来如果你新建一个 main.py,在里面写 import test_name_function,你会发现 test 文件的 if 块不会执行——因为此时 test_name_function 是被导入的模块,它的 __name__ 取值为 'test_name_function',不满足判断条件。

内容的提问来源于stack exchange,提问作者Praveen Paliwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:51:03