FastAPI——Python类型简介

发布时间:2026/9/14 14:38:19

FastAPI——Python类型简介 学习来源FastAPI 官方中文文档 · Python 类型简介适用人群刚接触 FastAPI、对 Python 类型注解不熟的开发者为什么这篇要第一个看FastAPI 整个框架完全基于类型提示工作。你如果不懂类型提示后面看教程会一脸懵——因为 FastAPI 把参数类型同时当成了接口定义、数据校验规则、文档生成依据。一篇看懂类型提示后面事半功倍。而且退一万步讲类型提示本身是 Python 3.5 的标准特性不用 FastAPI 也该学编辑器补全和报错能直接上一个台阶。一、什么是类型提示类型提示type hints / 类型注解是 Python 里一种特殊语法允许你声明变量的类型。注意它只是提示不改变程序运行逻辑。Python 运行时并不会拿它去做强制校验——真正的校验交给编辑器和类型检查工具如 mypy。最简单的例子给函数参数加类型defget_full_name(first_name:str,last_name:str):full_namefirst_name.title() last_name.title()returnfull_nameprint(get_full_name(john,doe))# John Doe把first_name, last_name改成first_name: str, last_name: str就完了。这是冒号:不是赋值等号别混。二、动机凭什么要写它假设你写一个函数参数都准备好了现在要调用把首字母大写的方法。是upperuppercasecapitalize老办法查文档、翻记忆。用了类型提示在参数后面打个.按CtrlSpace编辑器立刻列出这个类型可用的所有方法直接选title()。更进一步——类型提示还能帮你抓 bugdefget_name_with_age(name:str,age:int):name_with_agename is this old: age# ❌ 编辑器标红int 不能和 str 拼接returnname_with_age编辑器一看age是int立刻告诉你这行要改成str(age)。没有类型提示这错误得跑到运行时才炸。一句话类型提示 编辑器的超能力补全 报错检查。三、怎么声明类型1. 简单类型不只有str标准类型都能用intfloatboolbytesdefget_items(item_a:str,item_b:int,item_c:float,item_d:bool,item_e:bytes):returnitem_a,item_b,item_c,item_d,item_e2.typing模块特殊场景从标准库typing导入比如任意类型用AnyfromtypingimportAnydefsome_function(data:Any):print(data)3. 泛型Generics有些类型能在方括号里接收类型参数声明内部元素类型。这就是泛型。listtuplesetdictListdefprocess_items(items:list[str]):foriteminitems:print(item)# item 被推导为 str照样有补全str是传给list的类型参数意思是这是一个列表里面每一项都是 str。Tuple 和 Setdefprocess_items(items_t:tuple[int,int,str],items_s:set[bytes]):returnitems_t,items_sitems_t3 元组分别是int、int、stritems_s集合每项都是bytesDictdefprocess_items(prices:dict[str,float]):foritem_name,item_priceinprices.items():print(item_name)# strprint(item_price)# float字典传两个类型参数第一个是键的类型第二个是值的类型。4. Union多种类型和 None一个变量可能是多种类型之一用竖线|分隔Python 3.10 写法defprocess_item(item:int|str):print(item)可能为None的情况defsay_hi(name:str|NoneNone):ifnameisnotNone:print(fHey{name}!)else:print(Hello World)用str | None代替单纯str编辑器能在你误把None当str用时报警。旧版 Python3.9 及以下要写Optional[str]和Union[int, str]从typing导入。能用|就别用老写法。5. 类作为类型自定义类也能当类型声明classPerson:def__init__(self,name:str):self.namenamedefget_person_name(one_person:Person):returnone_person.name注意one_person: Person表示它是Person类的实例不是它是Person类本身。四、Pydantic 模型FastAPI 的数据基石Pydantic 是做数据验证的库。你把数据的形状声明成一个带属性的类每个属性带类型fromdatetimeimportdatetimefrompydanticimportBaseModelclassUser(BaseModel):id:intname:strJohn Doesignup_ts:datetime|NoneNonefriends:list[int][]external_data{id:123,signup_ts:2017-06-01 12:22,friends:[1,2,b3],}userUser(**external_data)print(user)# User id123 nameJohn Doe signup_tsdatetime.datetime(2017, 6, 1, 12, 22) friends[1, 2, 3]print(user.id)# 123看重点传进去的123字符串、2字符串、b3字节都被 Pydantic自动转换成了int。校验 转换一步到位还给你完整的编辑器支持。FastAPI 完全基于 Pydantic后面定义请求体就是这么玩。五、Annotated挂元数据的骚操作Python 允许用Annotated在类型提示里塞额外元数据fromtypingimportAnnotateddefsay_hello(name:Annotated[str,this is just metadata])-str:returnfHello{name}Python 本身不处理Annotated里的元数据对编辑器来说类型还是str。第一个类型参数是真实类型其余只是给工具用的元数据。FastAPI 之后会用这块空间塞这个参数怎么处理的指令比如它是查询参数还是请求头。现在知道它存在就行。整理自 FastAPI 官方中文文档供学习使用。
延伸阅读

更多相关文章

2026/9/14 14:34:51

进动目标微多普勒仿真:散射点建模与MATLAB实现

简介:在雷达信号处理中,多普勒效应描述运动目标的频率偏移,而微多普勒效应可揭示目标自身旋转、振动等微小动态特征,对于区分旋转部件与静止结构等场景具有重要价值。这份MATLAB程序聚焦动目标散射点的进动仿真,基于点…

2026/9/14 14:34:51

uC/OS-II上下文切换原理与Cortex-M3汇编实现解析

1. 为什么从第 4 篇开始讲上下文切换——它才是 uC/OS-II 真正的“心跳” 你翻过 uC/OS-II 的源码目录,大概率会先被 os_core.c 和 os_task.c 吸引——毕竟任务创建、删除、挂起这些 API 名字直白,调用逻辑也容易跟踪。但真正让这个系统“活起来”的…

2026/9/14 14:34:51

基于Web的数据库管理工具DBViewer:架构设计与实践

1. 项目思路与整体架构设计DBViewer这个项目,一句话概括就是:把数据库管理工具从桌面客户端搬进浏览器,让所有人通过一个网址就能完成建连、查表、写SQL、看结果集这些日常操作。做这个事的起因并不复杂,团队里DBA和研发日常用的工…

2026/9/14 14:29:50

Android仿B站项目源码解析:从架构设计到列表优化实战

简介:仿哔哩哔哩B站的安卓客户端源码学习包,面向希望在真实项目中进阶的Android初中级开发者,也适合准备移动端面试或毕设项目的读者。源码围绕B站典型业务场景展开,覆盖MVP架构、RecyclerView列表适配与复用、自定义View绘制交互…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码