FastAPI——Python类型简介
📅 2026/7/13 22:18:32
👁️ 次浏览
学习来源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 官方中文文档供学习使用。
我们先写第一个版本的代码
版本核心目标技术亮点V1.0 基础 RAG跑通文档上传 → 解析 → 检索 → 生成LangChain LlamaIndex PDF 解析 向量检索 Pydanti
课前准备:
1.安装python
Download Python | Python.org
2.安装python集成开发环境,我安装的…
📅 2026/7/13 22:18:32
情感语音合成技术突破如何重塑人机交互的未来 【免费下载链接】chatterbox SoTA open-source TTS 项目地址: https://gitcode.com/GitHub_Trending/chatterbox7/chatterbox
在人工智能语音合成的演进历程中,传统TTS系统长期面临着一个核心挑战:如…
📅 2026/7/13 22:17:31
更多请点击:
https://intelliparadigm.com
第一章:AI编程SaaS开发双栈融合的范式演进与企业级交付价值 传统软件交付正经历结构性重构:AI不再仅作为能力插件嵌入SaaS系统,而是深度耦合于需求建模、代码生成、测试验证与持续运维全…
📅 2026/7/13 22:17:31
1. 项目概述:为什么我们需要一个“现代”的C项目脚手架?如果你和我一样,在C领域摸爬滚打了几年甚至十几年,肯定经历过无数次从零开始搭建新项目的“阵痛期”。打开编辑器,新建一个main.cpp,然后呢ÿ…
📅 2026/7/13 23:01:47
上个月一个短剧导演发朋友圈:AI生成的女主被举报了,和某当红女演员撞脸。
评论区一半吐槽,一半在问怎么办。
2026年上半年至少三起AI短剧因角色形象侵权被发律师函。但真正让创作者头疼的不是法院传票——是平台。以前等投诉再下架࿰…
📅 2026/7/13 23:01:47
Three.js Water.js 性能调优:从纹理分辨率到帧率优化的实战指南在WebGL应用中,水面效果一直是提升场景真实感的关键元素。Three.js的Water.js扩展为我们提供了快速实现高质量水面反射和折射的能力,但随之而来的性能挑战也不容忽视。本文将深入…
📅 2026/7/13 23:01:47
1. 项目概述:一份面向未来的真题解析指南最近在后台和社群里,看到不少同学在打听2025年9月GESP C三级的备考资料和真题动向。作为一路从NOIP摸爬滚打到带学生参加各类编程认证的“老码农”,我深知一份高质量的真题解析,对于备考者…
📅 2026/7/13 23:01:47
zipgrep 与 zgrep 深度对比:Linux 压缩文件搜索实战指南在 Linux 系统中处理压缩文件时,快速定位关键内容是一项高频需求。面对 zip 格式的压缩包,我们通常有两种选择:专为 zip 设计的zipgrep和通用压缩文件搜索工具zgrep。本文将…
📅 2026/7/13 23:01:47
1. 项目概述与核心思路 最近在洛谷上刷题,碰到了P1125这道“笨小猴的幸运密码”,题目挺有意思,把字符串处理、质数判断和简单模拟结合在了一起。题目大意是给你一个单词,你需要统计出单词中出现次数最多和最少的字母,然…
📅 2026/7/13 23:00:45
做技术的人都知道,环境配置是最让人头秃的环节。特别是当你面对一个相对小众或者刚起步的项目时,文档可能不全,社区可能冷清。这时候,找到靠谱的来源就显得尤为重要。今天咱们不聊虚的,就聊聊怎么稳妥地完成 openclaw安装官方 流程,顺便分享几个我踩过的坑,希望能帮你省…
📅 2026/7/13 0:01:22
1. 项目概述:当火焰特效成为帧率杀手在UE5项目里,尤其是那些追求电影级视觉的开放世界或者大场景战斗游戏,一个熊熊燃烧的篝火、一次震撼的爆炸,往往是点燃玩家情绪的关键。Niagara作为虚幻引擎5中取代了老旧的Cascade的下一代粒子…
📅 2026/7/13 0:01:52
1. 项目概述与核心价值 最近在对接抖音小游戏平台时,侧边栏复访功能成了一个绕不开的“必答题”。很多开发者朋友,包括我自己一开始,都对这个功能有点摸不着头脑:它到底是什么?为什么平台这么重视?不接入行…
📅 2026/7/13 0:01:52
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/13 5:30:27
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/13 6:21:22
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/13 7:10:30
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/13 3:29:47
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/13 19:47:36
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/13 9:07:16