initial vault sync

This commit is contained in:
冯先生
2026-06-23 00:24:32 +08:00
commit 8e7723c17a
795 changed files with 157458 additions and 0 deletions

View File

@ -0,0 +1,96 @@
#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)。
**示例**​:在模块中定义工具函数后,用此条件包裹测试代码,即可一键验证功能,同时确保其他导入模块的代码不受干扰。