前言:
__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
Python中if __name__ == '__main__'的作用

被折叠的 条评论
为什么被折叠?



