推理基础设施 · Python4.4 if __name__ == "__main__"
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 运行这个文件,看输出。

💡 思路提示

点开看提示
  1. __name__ 是 Python 自动设置的变量
  2. if 块里写的代码,只有直接执行该文件才会跑
  3. 在终端跑: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 目录里全是这种写法。