python:if __name__ == ‘__main__‘用法
if __name__ == '__main__': 是 Python 中一个非常常见且重要的语法结构,用于控制代码的执行方式。下面我们来详细解析它的用法、原理和实际应用场景。
🔹 一、基本语法
python
if __name__ == '__main__':
# 这里的代码只有在脚本直接运行时才会执行
print("程序正在直接运行")
🔹 二、作用与原理
✅ 1. 区分“被导入”和“直接运行”
- 当你 直接运行 一个
.py文件时(例如:python my_script.py),Python 解释器会将该文件的__name__变量设置为'__main__'。 - 当你 导入 该文件作为模块使用时(例如:
import my_script),__name__的值就是模块名(比如'my_script')。
🧠 示例说明:
假设有一个文件叫 my_module.py:
python
# my_module.py
print("模块加载中...")
def hello():
print("Hello from module!")
if __name__ == '__main__':
print("我被直接运行了!")
hello()
情况一:直接运行该文件
python my_module.py
输出:
模块加载中...
我被直接运行了!
Hello from module!
✅ 因为
__name__ == '__main__'成立,所以if块中的代码被执行。
情况二:在另一个文件中导入它
# main.py
import my_module
print("导入成功!")
输出:
模块加载中...
导入成功!
❌ 不会打印 “我被直接运行了!” 和
hello(),因为此时my_module.__name__ == 'my_module',不等于'__main__'。
🔹 三、为什么需要这个结构?
✅ 用途 1:提供可测试的代码
你可以把模块中的功能函数写好,同时在 if __name__ == '__main__': 块中加入测试代码或演示代码。
# calculator.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
if __name__ == '__main__':
print(add(2, 3)) # 输出: 5
print(subtract(5, 2)) # 输出: 3
这样别人导入你的模块时不会自动运行这些测试,但你自己运行时可以快速验证功能。
✅ 用途 2:避免副作用
如果你的模块里有副作用(如打印、修改全局变量、启动服务等),不想在导入时触发,就可以用这个判断来避免。
✅ 用途 3:实现命令行工具
很多 Python 脚本既是模块又是独立程序,例如:
# my_tool.py
import sys
def process_data(data):
return data.upper()
if __name__ == '__main__':
if len(sys.argv) != 2:
print("用法: python my_tool.py <文本>")
sys.exit(1)
result = process_data(sys.argv[1])
print(result)
运行:
python my_tool.py hello
输出:
HELLO
而当你在其他脚本中 import my_tool 时,不会触发命令行逻辑。
🔹 四、扩展知识
📌 __name__ 是什么?
__name__ 是 Python 内置的特殊变量,表示当前模块的名称。
| 使用方式 | __name__ 的值 |
|---|---|
直接运行 script.py | '__main__' |
导入 import script | 'script' |
从包导入 from pkg import mod | 'pkg.mod' |
🔹 五、最佳实践建议
- 每个模块都应包含
if __name__ == '__main__':,尤其是当你希望它既能被导入又能独立运行。 - 在该块中放 测试代码、示例、主程序逻辑。
- 避免在模块顶层写会产生副作用的语句(如
print,open,requests.get等)。
🔹 六、小结
| 功能 | 说明 |
|---|---|
if __name__ == '__main__': | 判断当前脚本是否是主程序入口 |
| 直接运行 | __name__ == '__main__' → 执行块内代码 |
| 被导入 | __name__ == 模块名 → 跳过块内代码 |
| 优点 | 实现模块复用 + 独立运行能力,避免污染导入环境 |
✅ 总结一句话:
if __name__ == '__main__':是 Python 中让一个文件既可作为模块导入,又可作为独立程序运行的关键机制。

浙公网安备 33010602011771号