# Python 速查

## 数据类型

动态强类型，常用容器是列表、元组、字典和集合。元组不可变，可以作字典键；集合自动去重，判断成员是否存在比遍历列表快得多，属于常数级查找，字典键还要求对象可哈希。

```python
items = [1, 2, 3]
```

## 推导式

列表、字典、集合推导式比显式循环紧凑得多，尾部的条件负责过滤，嵌套还能生成二维结构。层级超过两层就该改回普通循环，可读性比一行炫技更值钱，字典推导同样支持条件过滤。

```python
sq = [x * x for x in range(8)]
```

## f-string

字符串前加 f，花括号里可以放任意表达式。冒号后写格式规格控制精度、宽度和对齐，表达式后加等号会连表达式本身一起打印，调试时省去重复敲变量名，三引号字符串也支持这个前缀。

```python
print(f"{199.5:.2f} 元")
```

## 常用内置函数

带下标迭代用枚举函数，并行遍历多个序列用拉链函数，排序可传入键函数自定义顺序，任意值判断、全体判断与求和都有对应内置函数，配合生成器表达式能少写很多临时循环。

```python
print(list(zip([1, 2], ["x", "y"])))
```

## 虚拟环境

每个项目单独建环境，避免不同项目的依赖版本互相污染。装完包把版本导出到锁文件，部署时按锁文件重装；注意 Windows 的激活脚本在脚本目录，退出环境用专门的命令，别直接删目录。

```bash
python -m venv .venv
```

## 异常处理

没有抛异常时才执行 else 分支，无论成败都会运行 finally，适合释放文件和数据库连接。多个异常写进元组一起捕获，别用不带类型的捕获把错误悄悄吞掉，自定义异常应当继承异常基类。

```python
try: print(10 / int("0"))
except ZeroDivisionError: print("除零")
```
