🐍Python 工程与虚拟环境

项目入口与__main__

面试回答

常见问法

Python 里的 if __name__ == "__main__": 是做什么的?

回答

它用于区分“当前文件是被直接执行”还是“被当作模块导入”。当文件被直接运行时,__name__ 会是 "__main__";被导入时,__name__ 通常是模块名。

def main():
    print("run app")

if __name__ == "__main__":
    main()

追问

  • 为什么把启动逻辑放进 main() 更好
  • 包项目的入口和这个写法是什么关系
  • python -m package.module__name__ 会是什么

原理展开

这个写法的核心价值是避免模块被导入时立刻执行脚本逻辑,便于:

  • 单元测试
  • 复用函数
  • 作为库导入

工程里还常见把 CLI 入口、服务启动入口都统一封装进 main(),然后由脚本或打包工具引用。

面试里一句话够清楚: “__main__ 保护的是入口逻辑和模块复用边界。”

易错点

  • 顶层写大量副作用代码
  • 把模块导入和脚本执行混成一回事
  • 不知道包级入口和模块级入口都依赖同一套机制