前言:
__name__
是 Python 中的一个内置变量,用于表示当前模块的名字。它的值取决于 Python 文件的运行方式:1.如果文件是直接运行的(例如
python script.py
),那么__name__
的值是"__main__"
。2.如果文件是被导入的(例如
import script
),那么__name__
的值是模块名(即"script"
)。
if __name__ == "__main__":
的作用
这个条件判断的主要作用是区分当前模块是被直接运行还是被导入,从而控制某些代码的执行方式。
1. 直接运行脚本时(python script.py
)
-
__name__
的值是"__main__"
,所以if
块内的代码会执行。 -
通常用于定义脚本的主逻辑,比如测试代码、启动函数等。
2. 被其他模块导入时(import script
)
-
__name__
的值是模块名(如"script"
),所以if
块内的代码不会执行。 -
这样可以避免导入时自动执行不必要的代码,仅提供函数、类等定义。
为什么需要这个判断?
-
防止导入时执行测试代码
如果模块中有测试代码(如print()
、函数调用等),直接导入会导致这些代码自动运行,可能影响主程序逻辑。使用if __name__ == "__main__":
可以避免这个问题。 -
模块化开发
在大型项目中,某些模块既可以被其他模块导入使用,也可以单独运行(比如测试功能)。if __name__ == "__main__":
让模块更加灵活。 -
提高代码复用性
如果模块被导入,它只提供函数/类定义,而不会执行额外的操作,使得代码更干净、更易于管理。
示例
module.py
def hello():
print("Hello from module!")
# 这部分代码只有在直接运行 module.py 时才会执行
if __name__ == "__main__":
print("This script is being run directly.")
hello() # 测试 hello() 函数
运行方式 1:直接运行
python module.py 输出: This script is being run directly. Hello from module!(if __name__ == "__main__": 下的代码被执行)
运行方式 2:导入模块
python
# 另一个脚本(如 main.py)
import module
module.hello()
输出:
Hello from module!(
if __name__ == "__main__":
下的代码不会执行,因为__name__
是"module"
,不是"__main__"
)
总结
情况 | __name__ 的值 | if __name__ == "__main__": 是否执行 |
---|---|---|
直接运行脚本 | "__main__" | ✅ 执行 |
被其他模块导入 | "模块名" | ❌ 不执行 |
这个机制让 Python 脚本既能作为独立程序运行,又能作为模块被导入,是 Python 模块化编程的重要特性。
END