当前位置: 首页 > news >正文

[智能体-329]:Annotated 通俗详解

一句话:Annotated就是给「数据类型」贴标签、加备注、绑规则本身不改类型,只是额外附带上说明 / 约束,常和 Pydantic、FastAPI 搭配使用。

一、先搞懂:为什么需要它?

平时写类型注解,只能单纯标注类型

python

运行

age: int

只能看出age是整数,但不知道取值范围、含义、填写规则

如果想额外加信息(比如:年龄 0~120、字段说明、校验规则),普通注解(age: int)做不到,这时候就用Annotated


二、基础用法

1. 导入

Python3.9+ 自带,直接导入:

python

运行

from typing import Annotated

3.8 及以下先装依赖:pip install typing-extensions,再从typing_extensions导入。

2. 固定语法

python

运行

Annotated[基础类型, 附加内容1, 附加内容2, ...]
  • 第一个参数原本的类型(int/str/ 列表等),必填
  • 后面所有参数随便加文字、规则、对象,都是附加信息,数量不限

3. 最简单示例(加文字备注)

python

运行

from typing import Annotated # 给 int 加说明:年龄,范围0-120 Age = Annotated[int, "用户年龄,取值 0 ~ 120"] # 使用,本质还是 int 类型 def get_age() -> Age: return 20 print(type(get_age())) # <class 'int'>,类型没变

✅ 关键点:底层类型完全不变附加内容只是 “附属信息”。


三、常见使用场景(由浅到深)

场景 1:纯文字注释(看代码 / 生成文档用)

给字段写中文说明,别人一看就懂,不用翻注释:

python

运行

from typing import Annotated # 字符串 + 备注:登录账号,4-20位 Username = Annotated[str, "登录账号,长度4~20位"] name: Username = "zhangsan"

场景 2:多条附加信息叠加

可以一次性加多个备注、标记:

python

运行

from typing import Annotated Phone = Annotated[ str, "中国大陆手机号", "必须11位数字", "不可为空" ] tel: Phone = "13800000000"

场景 3:搭配 PydanticField(最常用:绑定校验规则和类型自动转化)

这是工作中主力用法:把类型 + 校验规则打包在一起,还能重复使用。

普通写法(规则写在字段后,无法复用):

python

运行

from pydantic import BaseModel, Field class User(BaseModel): age: int = Field(ge=0, le=120)

Annotated改写(规则打包,全局复用):

python

运行

from typing import Annotated from pydantic import BaseModel, Field # 打包:int类型 + 年龄校验规则 AgeRule = Annotated[int, Field(ge=0, le=120, description="用户年龄")] # 模型里直接用,代码更干净 class User(BaseModel): age: AgeRule # 另一个模型,直接复用这套规则,不用重复写 Field class Student(BaseModel): age: AgeRule

对比总结:

  • 不用Annotated:规则散在每个字段里,重复代码多
  • Annotated类型 + 规则 封装成一个整体,一次定义,到处调用

场景 4:搭配 FastAPI(接口文档 + 参数校验)

接口开发标配,附加内容会自动展示在接口文档里:

python

运行

from fastapi import FastAPI from typing import Annotated app = FastAPI() @app.get("/hello") def say_hello( num: Annotated[int, "传入一个正整数", 1, 999] ): return {"number": num}

打开接口文档,能直接看到后面的文字说明。


四、运行时读取附加信息

如果代码里需要拿到你写的备注 / 规则,用__metadata__属性

python

运行

from typing import Annotated Info = Annotated[int, "测试数字", 0, 100] # 获取所有附加内容,返回元组 print(Info.__metadata__) # ('测试数字', 0, 100) # 获取原始基础类型 print(Info.__origin__) # <class 'int'>

五、核心特点总结(好记版)

  1. 不改变原类型Annotated[int, ...]到头来还是int,运算、类型判断不受影响。
  2. 附加内容自由后面可以写字符串、校验规则、对象,想加多少加多少。
  3. 核心价值:复用 + 解耦「类型 + 规则 + 说明」打包,一处定义,多处使用,减少重复代码。
  4. 主打搭档Pydantic、FastAPI是黄金组合,专门用来做数据约束、接口文档。

六、最简实战组合(日常开发直接抄)

python

运行

from typing import Annotated from pydantic import BaseModel, Field # 1. 统一封装通用字段规则 UserName = Annotated[str, Field(min_length=2, max_length=20, description="用户名")] UserAge = Annotated[int, Field(ge=0, le=120, description="年龄")] # 2. 模型直接引用 class User(BaseModel): name: UserName age: UserAge
http://www.jsqmd.com/news/978645/

相关文章:

  • 从幸存路径到最终输出:深入拆解维特比译码器的四个核心硬件单元(BMU/ACSU/SMU/TBU)
  • 从音频ADC到工业测量:聊聊ADS1274/1278这颗“跨界”芯片的选型与设计思路
  • 告别if-else!用查表法优化你的51单片机点阵驱动代码(附Proteus仿真)
  • 炉石传说HsMod插件完整指南:55项功能一键解锁游戏新体验
  • 别再手动翻波形了!Verdi FSDB文件高效生成与管理的5个实用技巧
  • 毫米波与太赫兹信道测量中的功率校正技术
  • Typora收费后,我找到了这款完全开源免费的Markdown编辑器MarkText,附详细安装与主题配置教程
  • 别再死记硬背了!用Multisim 14.2仿真带你彻底搞懂差分放大电路的四种输入输出模式
  • 从Fiddler Classic到Everywhere:老用户迁移指南与新版本功能实测对比
  • 别再为hiprint表格数据绑定头疼了!Vue3项目实战避坑指南(附完整代码)
  • VMware Workstation 17 Pro玩家必备:让CentOS 8虚拟机丝滑运行的Tools安装与优化指南
  • 告别阻塞等待!深入理解STM32 HAL库中ADC与DMA的协作机制(以F103C8T6为例)
  • COMSOL新手避坑指南:用二维轴对称模型搞定水杯自然对流仿真(附完整参数设置)
  • 2026年固态硅胶表带实测评测:固态硅胶表带开模/氟橡胶手表带开模/氟橡胶表带开模/液态硅胶TPU表带开模/液态硅胶包胶注塑开模定制/选择指南 - 优质品牌商家
  • 无声语音接口技术:EMG与视觉融合的语音生成方案
  • 异形钎焊环技术要点解析及专业供应商实测对比:颗粒焊料、黄铜焊膏、助焊膏、定制焊料、活性钎料、焊带、焊接加工、焊片选择指南 - 优质品牌商家
  • Diablo Edit2:暗黑破坏神2角色存档编辑器完全指南
  • 别再让亚稳态搞垮你的FPGA!手把手教你搞定单bit信号的跨时钟域同步(附Verilog代码)
  • G-Helper:华硕笔记本轻量级控制中心的完全解析与实战指南
  • Apex Legends实战用YOLOv5轻量辅助工具:CPU可跑、含截图捕获+平滑鼠标追踪
  • 告别Excel画图!用SerialPlot串口波形软件,5分钟搞定AD采集数据实时可视化
  • 告别裸机:在FreeRTOS上为STM32移植SOEM EtherCAT主站的思路与实测
  • dsPIC33E电机控制实战:6路电流电压同步采样配置避坑指南(附完整代码)
  • 韓文翻譯公司首選:信實翻譯
  • 从图像分类到推荐系统:聊聊MLP和CNN这对‘兄弟’在不同业务场景下的选型心得
  • 科研人效率翻倍:NoteExpress搭配Zotero?我的文献管理组合拳实战分享
  • uniapp微信小程序调用触站AI实现图片转动漫风格的完整前端示例
  • Verilog实现50%占空比5分频电路:一个计数器+两个寄存器搞定
  • 2026年上海追讨小三财产律师排行及收费参考:上海出轨转账追回律师、上海原配可以直接起诉小三吗、上海原配告小三律师选择指南 - 优质品牌商家
  • 国内西泽切削液混配器主流供应商实力排行盘点:切削油/半合成切削液/屏幕切削液/氧化锆切削液/淬火油/清洗剂/玻璃镜头切削液/选择指南 - 优质品牌商家