速查表
读代码时随查随用。适用 Python 3.12–3.14,核对日期 2026-10-06。详细讲解见对应课程。
运行与环境
| 需求 | 命令 |
|---|---|
| 运行脚本 | uv run 文件.py |
| 交互式解释器 | uv run python |
| 增删依赖 | uv add 包 / uv remove 包 |
| 同步环境 | uv sync |
| 查看版本与解释器 | uv run python -c "import sys; print(sys.version, sys.executable)" |
| 一次性工具 | uvx ruff check . |
语法骨架
python
"""模块文档字符串。"""
import os # 标准库
from dataclasses import dataclass # 从模块导入名字
MAX_TURNS = 5 # 常量(约定)
@dataclass
class Tool:
name: str
def run(self, **kwargs) -> str: # 方法:self + 任意关键字参数
return f"{self.name}({kwargs})"
def main() -> None:
for turn in range(1, MAX_TURNS + 1): # 1..5
if turn == 3:
break
else:
print("没有 break 时执行")
if __name__ == "__main__": # 仅直接运行时执行
main()值与运算
| 写法 | 结果 / 含义 |
|---|---|
7 / 2、7 // 2、7 % 2、2 ** 10 | 3.5、3、1、1024 |
a or b | a 为真返回 a,否则 b(常用于默认值) |
a and b | a 为假返回 a,否则 b |
x if cond else y | 条件表达式 |
x is None | 判断 None(不要用 ==) |
0 < x <= 10 | 链式比较 |
| 假值 | None、False、0、0.0、""、[]、()、{}、set() |
字符串
| 写法 | 含义 |
|---|---|
f"{x}"、f"{x:.2f}"、f"{x:>8}"、f"{x=}" | 插值、两位小数、右对齐宽 8、调试输出 |
s.split()、",".join(xs) | 拆分、连接 |
s.strip()、s.replace(a, b) | 去空白、替换 |
s.startswith(p)、s.removeprefix(p) | 前缀判断、去前缀 |
s[1:4]、s[::-1] | 切片、反转 |
s.encode("utf-8")、b.decode("utf-8") | str ⇄ bytes |
容器
| 操作 | list | dict | set |
|---|---|---|---|
| 字面量 | [1, 2] | {"k": 1} | {1, 2}(空集合 set()) |
| 添加 | xs.append(x) / extend | d[k] = v / update | s.add(x) |
| 删除 | xs.pop() / remove(x) | d.pop(k) / del d[k] | s.discard(x) |
| 读取 | xs[0]、xs[-1] | d[k](缺键抛错)、d.get(k, 默认) | — |
| 包含 | x in xs | k in d(判断键) | x in s |
| 遍历 | for i, x in enumerate(xs) | for k, v in d.items() | for x in s |
| 合并 | [*a, *b] / a + b | a | b / {**a, **b} | a | b |
| 推导式 | [f(x) for x in xs if p(x)] | {k: v for k, v in d.items()} | {f(x) for x in xs} |
切片:xs[start:stop:step],含头不含尾,越界不报错。解包:a, *rest = xs、for k, (x, y) in ...。
函数
| 写法 | 含义 |
|---|---|
def f(a, b=1) | 位置参数 + 默认值(默认值定义时求值一次,勿用可变对象) |
def f(*args, **kwargs) | 收集多余位置参数(tuple)/ 关键字参数(dict) |
def f(a, /, b, *, c) | a 仅限位置,c 仅限关键字 |
f(*xs)、f(**d) | 调用时展开序列 / 字典 |
lambda x: x * 2 | 单表达式匿名函数 |
sorted(xs, key=lambda x: x["n"]) | 按键排序 |
@deco | 等价于 f = deco(f) |
nonlocal x / global x | 在函数内重新绑定外层 / 全局名字 |
异常
python
try:
value = risky()
except (KeyError, ValueError) as e: # 具体异常,写在前
log.warning("失败:%s", e)
raise CustomError("说明") from e # 保留原因
except Exception:
raise # 原样重抛
else:
print("无异常时执行")
finally:
print("总会执行")| 异常 | 常见原因 |
|---|---|
NameError | 名字未定义 / 拼写错误 / 忘记导入 |
TypeError | 类型不对、参数个数或名字不对 |
ValueError | 值不合法(int("abc")) |
KeyError / IndexError | dict 缺键 / 下标越界 |
AttributeError | 对象没有该属性(常见:意外的 None) |
ModuleNotFoundError | 未在项目环境运行 / 包名与导入名不同 |
Traceback:先看最后一行,再从下往上找自己的代码。
类
| 写法 | 含义 |
|---|---|
class B(A): / super().__init__() | 继承 / 调用父类 |
obj.method(x) | 等价 Class.method(obj, x) |
@property | 像属性一样访问 |
@classmethod / @staticmethod | 第一个参数为类 / 无隐式参数 |
__init__、__repr__、__eq__、__len__、__iter__、__getitem__、__call__、__enter__/__exit__ | 常用特殊方法 |
@dataclass(frozen=True)、field(default_factory=list) | 数据类、不可变、可变默认值 |
类型注解
| 写法 | 含义 |
|---|---|
def f(x: int) -> str | 参数与返回值注解(运行时不检查) |
list[str]、dict[str, int]、tuple[int, ...] | 容器泛型 |
str | None = Optional[str] | 可为 None |
Literal["a", "b"] | 取值限定 |
TypedDict | 描述 dict 结构(SDK 的 *Param) |
Callable[[int], str]、Iterable[T] | 可调用对象、可迭代对象 |
def f[T](x: T) -> T、type Alias = ... | 3.12 起泛型语法 |
标准库
| 需求 | 写法 |
|---|---|
| 路径 | Path(__file__).resolve().parent / "data.json" |
| 读写文本 | p.read_text(encoding="utf-8") / p.write_text(s, encoding="utf-8") |
| JSON | json.dumps(o, ensure_ascii=False, indent=2) / json.loads(s) |
| 环境变量 | os.getenv("K")(缺失 None)/ os.environ["K"](缺失 KeyError) |
| 当前 UTC 时间 | datetime.now(timezone.utc).isoformat() |
| 计数 / 分组 | Counter(xs).most_common(3) / defaultdict(list) |
| 日志 | log = logging.getLogger(__name__);log.info("x=%s", x) |
探查对象
| 工具 | 用途 |
|---|---|
type(x)、dir(x)、help(x)、vars(obj) | 类型、属性列表、文档、实例属性 |
inspect.signature(f)、inspect.getsourcefile(f) | 签名、源码位置 |
x.__module__、模块.__file__ | 定义模块、模块文件 |
breakpoint() | 进入调试器(p、n、s、c、q) |
minimal_agent.py 语法地图
| 行 | 代码 | 课程 |
|---|---|---|
| 11–14 | import os / import anthropic / from dotenv import load_dotenv | 5.1 |
| 17 | load_dotenv() | 8.3 |
| 20–32 | PROVIDERS = {...}、MAX_TURNS = 5 | 4.2、2.1 |
| 34–36 | os.getenv(...) or "deepseek"、PROVIDERS[provider] | 2.2、4.2 |
| 37–40 | anthropic.Anthropic(api_key=..., base_url=...) | 7.1、3.2 |
| 43–53 | tools = [{...}] | 4.1、8.2 |
| 56–62 | def get_weather(city)、TOOL_FUNCTIONS = {...} | 3.2 |
| 68 | for turn in range(1, MAX_TURNS + 1): | 3.1 |
| 70–75 | client.messages.create(model=..., ...) | 7.1、10.4 |
| 81 | "".join([b.text for b in resp.content if b.type == "text"]) | 4.4、2.3 |
| 89 | TOOL_FUNCTIONS[block.name](**block.input) | 3.3 |
| 97 | else:(属于 for) | 3.1 |