学习 FastAPI 前需要的 Python 基础
你应该会哪些基础
暂时只需要:变量、条件判断、循环、函数、列表、字典、导入模块、类的基本写法和异常。遇到生成器、上下文管理器和异步时,再结合后面的例子理解。
类型注解:给数据贴上说明标签
def multiply(price: float, count: int) -> float:
return price * countprice: float:希望price是浮点数。count: int:希望count是整数。-> float:希望函数返回浮点数。
普通 Python 函数不会仅凭类型注解自动检查全部输入。FastAPI 会读取接口的类型声明,并用它们解析请求、校验数据和生成文档。官方类型注解说明
常见类型写法
| 写法 | 含义 |
|---|---|
str | 字符串 |
int | 整数 |
float | 浮点数 |
bool | 布尔值 |
list[str] | 元素为字符串的列表 |
dict[str, int] | 键为字符串、值为整数的字典 |
str | None | 字符串或空值 |
Literal["low", "high"] | 只能取指定值,需要从 typing 导入 |
str | None 使用 Python 3.10 引入的联合类型写法。使用较旧 Python 时,许多新教程中的语法会无法运行。
“允许为空”与“可以不传”不同
下面是普通 Python 函数参数的对比:
def a(name: str):
pass
def b(name: str | None):
pass
def c(name: str | None = None):
passa:必须传参数;希望它是字符串。b:必须传参数;可以传None。c:可以省略;省略时使用None。
对 Pydantic 2 的模型字段来说,field: str | None 也表示“必填,但允许 null”;写上 = None 后,才表示“不提供时默认空值”。第 7 章会进一步区分这些情况。
装饰器:让函数与路由建立关系
@app.get("/hello")
def hello():
return {"message": "你好"}先把 @app.get("/hello") 理解为登记:收到 GET /hello 时,调用下面的 hello 函数。现在无需掌握装饰器内部如何实现。
类与对象
from pydantic import BaseModel
class Book(BaseModel):
title: str
pages: int
book = Book(title="Python 入门", pages=200)
print(book.title)Book 是描述数据结构的类;book 是具体的一份数据。继承 BaseModel 后,这个类就获得了 Pydantic 的数据解析与校验能力。
Annotated:类型加额外说明
from typing import Annotated
from fastapi import Query
# 语法片段:在接口参数中使用
# limit: Annotated[int, Query(ge=1, le=100)] = 10可以分成三部分读:
int:实际类型。Query(ge=1, le=100):来自查询字符串,取值范围为 1~100。= 10:没传时使用 10。
Annotated 的第一个参数是类型,后面的参数是额外元数据。FastAPI 官方推荐在适用场景使用这种写法。官方参数校验说明
with 与 yield 先认识一下
with open("notes.txt", "w", encoding="utf-8") as file:
file.write("今天学习了 FastAPI")with 帮助管理资源;离开代码块时,会按规则清理资源。数据库事务也可以用上下文管理器声明范围。
yield 可以让函数交出一个值并暂时停在原处。FastAPI 依赖中常用它表示:“先提供资源,等框架进入清理阶段再继续”。不要把它简单理解为普通 return。
本章练习
定义一个 Student 模型,包含必填的 name: str、必填的 age: int,以及可省略的 nickname: str | None = None。
过关标准:能读懂函数参数注解、BaseModel、Annotated 和默认值。