Skip to content

学习 FastAPI 前需要的 Python 基础 ​

你应该会哪些基础 ​

暂时只需要:变量、条件判断、循环、函数、列表、字典、导入模块、类的基本写法和异常。遇到生成器、上下文管理器和异步时,再结合后面的例子理解。

类型注解:给数据贴上说明标签 ​

python
def multiply(price: float, count: int) -> float:
    return price * count
  • price: 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 函数参数的对比:

python
def a(name: str):
    pass


def b(name: str | None):
    pass


def c(name: str | None = None):
    pass
  • a:必须传参数;希望它是字符串。
  • b:必须传参数;可以传 None。
  • c:可以省略;省略时使用 None。

对 Pydantic 2 的模型字段来说,field: str | None 也表示“必填,但允许 null”;写上 = None 后,才表示“不提供时默认空值”。第 7 章会进一步区分这些情况。

装饰器:让函数与路由建立关系 ​

python
@app.get("/hello")
def hello():
    return {"message": "你好"}

先把 @app.get("/hello") 理解为登记:收到 GET /hello 时,调用下面的 hello 函数。现在无需掌握装饰器内部如何实现。

类与对象 ​

python
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:类型加额外说明 ​

python
from typing import Annotated
from fastapi import Query

# 语法片段:在接口参数中使用
# limit: Annotated[int, Query(ge=1, le=100)] = 10

可以分成三部分读:

  1. int:实际类型。
  2. Query(ge=1, le=100):来自查询字符串,取值范围为 1~100。
  3. = 10:没传时使用 10。

Annotated 的第一个参数是类型,后面的参数是额外元数据。FastAPI 官方推荐在适用场景使用这种写法。官方参数校验说明

with 与 yield 先认识一下 ​

python
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 和默认值。