🐍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__ 保护的是入口逻辑和模块复用边界。”
易错点
- 顶层写大量副作用代码
- 把模块导入和脚本执行混成一回事
- 不知道包级入口和模块级入口都依赖同一套机制