#Python学习 #DeepSeek `if __name__ == "__main__":` 是 Python 中用于区分模块是作为**主程序运行**还是被**其他模块导入**的关键语法。其核心逻辑和用途如下: --- ### 一、核心原理 1. ​**`__name__` 变量的值由运行方式决定**​ - 当文件**直接运行**​(如命令行执行 `python script.py`),`__name__` 被自动设为 `"__main__"`。 - 当文件被**其他模块导入**​(如 `import script`),`__name__` 变为**模块名**​(即文件名,不含 `.py` 后缀)[1,3,5,8](https://tencent.yuanbao/@ref)。 2. ​**条件判断的作用**​ `if __name__ == "__main__":` 检查当前模块是否为主程序入口: - 若成立(直接运行),执行其下方代码块。 - 若不成立(被导入),跳过该代码块[3,8](https://tencent.yuanbao/@ref)。 --- ### 二、典型应用场景 1. ​**隔离测试代码**​ 在开发模块时,将测试代码放在此条件下,避免被导入时自动执行: ``` # math_utils.py def add(a, b): return a + b if __name__ == "__main__": print("测试结果:", add(2, 3)) # 直接运行才输出 ``` - 直接运行:输出测试结果。 - 被导入时:仅提供 `add()` 函数,不输出测试内容[1,8](https://tencent.yuanbao/@ref)。 2. ​**避免导入时的副作用**​ 防止导入模块时意外执行耗时操作(如初始化连接、打印日志): ``` # database.py import psycopg2 def connect(): return psycopg2.connect("dbname=test") # 仅定义函数 if __name__ == "__main__": conn = connect() # 直接运行才建立连接 print("连接成功") ``` 导入该模块不会触发数据库连接,节省资源[6](https://tencent.yuanbao/@ref)。 3. ​**定义命令行程序入口**​ 在大型项目中,将主逻辑封装为 `main()` 函数,通过此条件调用: ``` def main(): # 主程序逻辑(如处理参数、启动服务) ... if __name__ == "__main__": main() # 直接运行时启动 ``` 其他文件可安全导入该模块复用函数,而不会自动启动程序[3,5](https://tencent.yuanbao/@ref)。 --- ### 三、类比理解 - ​**主角模式**​:文件直接运行时是“主角”(`__name__` 为 `"__main__"`),执行专属任务(如测试、启动)。 - ​**配角模式**​:文件被导入时是“配角”(`__name__` 为模块名),仅提供工具函数,不抢戏[3,8](https://tencent.yuanbao/@ref)。 --- ### 四、常见错误纠正 - ​**误写为赋值语句**​: 正确写法是 `__name__ == "__main__"`(双等号 `==` 比较),而非 `__name__ = "__main__"`(单等号是赋值)[2](https://tencent.yuanbao/@ref)。 - ​**误解作用范围**​: 即使模块被其他文件导入过,只要直接运行它,`__name__` 仍为 `"__main__"`[5](https://tencent.yuanbao/@ref)。 --- ### 总结 `if __name__ == "__main__":` 是 Python 模块化编程的**最佳实践**,它: 1. 允许文件**同时具备两种角色**​(独立脚本 + 可导入模块)。 2. 提升代码的**复用性**​(导入时不触发额外操作)和**安全性**​(避免副作用)。 3. 明确程序的**执行入口**,便于维护[1,3,6](https://tencent.yuanbao/@ref)。 ​**示例**​:在模块中定义工具函数后,用此条件包裹测试代码,即可一键验证功能,同时确保其他导入模块的代码不受干扰。