当前位置: 首页 > 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.rkmt.cn/news/1490373.html

相关文章:

  • 从幸存路径到最终输出:深入拆解维特比译码器的四个核心硬件单元(BMU/ACSU/SMU/TBU)
  • 炉石传说HsMod插件完整指南:55项功能一键解锁游戏新体验
  • 别再手动翻波形了!Verdi FSDB文件高效生成与管理的5个实用技巧
  • 异形钎焊环技术要点解析及专业供应商实测对比:颗粒焊料、黄铜焊膏、助焊膏、定制焊料、活性钎料、焊带、焊接加工、焊片选择指南 - 优质品牌商家
  • 科研人效率翻倍:NoteExpress搭配Zotero?我的文献管理组合拳实战分享
  • uniapp微信小程序调用触站AI实现图片转动漫风格的完整前端示例
  • D3KeyHelper:暗黑3玩家的智能战斗助手,5分钟告别手动操作疲劳
  • COMSOL新手避坑指南:用‘水杯自然对流’案例,彻底搞懂布辛涅斯克近似和压力点约束
  • 国内西泽切削液混配器主流供应商实力排行盘点:切削油/半合成切削液/屏幕切削液/氧化锆切削液/淬火油/清洗剂/玻璃镜头切削液/选择指南 - 优质品牌商家
  • [智能体-327]:Annotated 语法详解
  • 从握手协议到FIFO:聊聊单bit跨时钟域那些‘高级’但实用的玩法
  • 别再死记硬背了!用Python实战微分方程,搞定人口预测与传染病模型
  • Figma-to-JSON 架构深度解析:企业级设计数据化解决方案
  • 3分钟免费解锁Grammarly Premium高级版完整指南:开源工具助你零成本提升写作质量
  • SerialPlot隐藏技巧:如何用一条串口数据线,同时绘制多路传感器波形?
  • 51单片机+Proteus超声波测距:从公式推导到代码实现的保姆级复盘(含定时器配置详解)
  • 别再傻傻分不清了!一文搞懂SDRAM、DDR、FLASH、ROM的区别与选型
  • STM32F4实战:手把手教你移植SOEM 1.4.0驱动EtherCAT伺服(附源码与调试心得)
  • 5mm铝板超声导波A0/S0模态计算与能量分布可视化MATLAB工具集
  • 脑白质粘弹性建模与分数阶微积分应用
  • 深入蜂鸟E203内核:我是如何用riscv-tests验证RV32I每一条指令的?
  • 用Kali的DDos-Attack工具做压力测试?安全研究员教你搭建本地靶场(VMware环境)
  • Kotlin 探秘之旅:数据类型中的精妙设计——基础类型、包装类与智能转换的艺术
  • 不止于编辑器:如何用Vue + Codemirror打造一个带智能提示、执行历史和Diff对比的SQL工作台?
  • 单智能体落地实战:从 ReAct 到 Production-Ready AI Agent 全链路解析
  • 告别DQN的离散局限:用DDPG和TD3搞定机器人连续动作控制(PyTorch实战)
  • 高效实现浏览器自动化:Chrome.ahk的5个实战场景解决方案
  • 用LM393和7805/7905搞定模电课设:一个完整的水位检测电路从仿真到焊接全记录
  • Linux——归档和传输文件
  • 模板驱动型文档自动化:从Word填空到动态内容生成