发布时间:2026/7/13 22:18:45
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/7/13 23:04:14

eNSP USG5500 防火墙策略配置:3区域隔离与基于源IP的访问控制

eNSP USG5500 防火墙策略配置:三区域隔离与精细化访问控制实战在网络安全架构设计中,区域隔离是最基础也最核心的安全策略之一。华为USG5500防火墙作为企业级安全设备,通过Trust、DMZ、Untrust三区域的划分,配合精细化的访问控制策…

2026/7/13 23:04:14

YOLO26结合MambaOut主干网络的目标检测优化实践

1. YOLO26与MambaOut主干的结合背景目标检测领域近年来经历了从传统卷积神经网络到Transformer架构的演进,而YOLO系列作为实时检测的标杆算法,其最新迭代版本YOLO26面临着计算效率与检测精度的双重挑战。CVPR 2025最新提出的MambaOut主干网络&#xff0c…

2026/7/13 23:04:14

STM32L442KC驱动EPT-14A4005P压电扬声器实现高可靠性警报系统

1. 项目背景与核心组件选型在工业控制、医疗设备和安防系统中,可靠的警报功能往往是保障安全的关键环节。这次我们要探讨的是如何利用EPT-14A4005P压电扬声器与STM32L442KC微控制器的组合,构建一个适应各种环境的高可靠性音频警报系统。选择EPT-14A4005P…

2026/7/13 23:04:14

AI论文写作工具:全流程解决方案与应用实践

1. 项目概述:AI论文写作全流程解决方案"论文魔法盒"是书匠策AI团队针对学术研究者开发的智能写作辅助工具,它整合了文献检索、框架生成、内容润色、格式规范等全流程功能。这个工具特别适合面临期刊投稿压力的高校师生、科研人员,能…

2026/7/13 23:04:14

Log4j 1.2.17 性能调优实战:3种Appender配置对比与10万条日志压测

Log4j 1.2.17 性能调优实战:3种Appender配置对比与10万条日志压测 在Java应用开发中,日志系统作为关键的基础设施组件,其性能表现直接影响着系统的整体吞吐量。当面对高并发场景时,一个配置不当的日志系统可能成为性能瓶颈。本文将…

2026/7/13 22:59:14

跳频通信系统 3 大核心模块解析:序列、合成器与同步器实战拆解

跳频通信系统三大核心模块深度解析:从原理到工程实现在无线通信技术日新月异的今天,跳频通信凭借其卓越的抗干扰能力和隐蔽性,已成为军事通信、物联网和工业控制等领域的核心技术。不同于传统定频通信的固定频率传输模式,跳频通信…

2026/7/13 6:38:38

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/13 14:26:14

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/13 18:07:53

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/13 0:00:24

广氟 PTFE 高速线缆膜 —— 高端线缆绝缘材料新选择

PTFE高速线缆膜的基本概念与特点 PTFE 高速线缆膜是以聚四氟乙烯树脂为原料,经膨化双向拉伸制成的多孔绝缘薄膜,作为高速高频通信线缆的核心介质材料,内部形成均匀连通的微孔结构,兼具极低介电常数与介电损耗,能有效降…

2026/7/13 11:33:05

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…