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
相关产品推荐
相关产品推荐

