04
文件操作与简单模块化 · 4 / 4
4.4 if __name__ == "__main__"
💡 这个写法几乎出现在每个推理框架的 demo 脚本里
4.4 if name == “main”
两个角色
- 当文件被 import 时,
__name__是模块名(比如"sampling") - 当文件被直接运行时,
__name__是"__main__"
# sampling.py
def apply_temperature(logits, t):
return [v / t for v in logits]
if __name__ == "__main__":
# 只有直接 python sampling.py 才会跑
print(apply_temperature([1, 2, 3], 0.5))
为什么不写 if 直接 print?
不写的话,别人 from sampling import apply_temperature 时也会把 print 跑一遍——很烦。
推理框架源码里 if 块一般用来
- 演示用法
- 跑一个 demo
- 跑测试
示范
def add(a, b):
return a + b
if __name__ == "__main__":
print(add(2, 3)) # 直接 python add.py 才打印
✍️ 练习
写一个文件 tokenizer_demo.py:
- 定义
fake_tokenize(text) -> list[str],按空格 split 返回 list - 在文件末尾加
if __name__ == "__main__": - 在 if 块里:调用
fake_tokenize("hello world how are you")并打印
用 Python 运行这个文件,看输出。
💡 思路提示
点开看提示
__name__是 Python 自动设置的变量if块里写的代码,只有直接执行该文件才会跑- 在终端跑:
python tokenizer_demo.py
✅ 参考解法
写不出来再打开
# tokenizer_demo.py
def fake_tokenize(text):
return text.split()
if __name__ == "__main__":
print(fake_tokenize("hello world how are you"))
# ['hello', 'world', 'how', 'are', 'you']
🔍 进阶思考
如果你在另一个文件里 from tokenizer_demo import fake_tokenize,不会触发 print。这就是 if 块的意义——让文件既能 import 也能独立跑。
推理框架的 examples 目录里全是这种写法。