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

[智能体-327]:Annotated 语法详解

Annotated类型注解增强工具,给已有类型附加元数据、描述、校验规则、文档额外信息,不改变原类型本身。

一、基础导入

python

运行

# Python 3.9+ 标准库 from typing import Annotated

二、核心语法

python

运行

Annotated[类型, 元数据1, 元数据2, ...]
  • 第一个参数:原生类型(int/str/list/ 自定义类等)
  • 后面所有参数:任意元数据(字符串、对象、函数、枚举等)
  • 运行时不强制校验仅存储附加信息,由第三方库(FastAPI、Pydantic、mypy)解析使用

三、基础示例

1. 加文字描述(最常用)

python

运行

from typing import Annotated # 给 int 附加说明 Age = Annotated[int, "用户年龄,范围 0-120"] def get_age() -> Age: return 25 # 本质还是 int print(type(get_age())) # <class 'int'>

2.多个元数据叠加

python

运行

Username = Annotated[ str, "登录用户名", {"min_length": 4, "max_length": 20}, # 字典规则 "不可包含特殊字符" ]

四、实战场景(主流用法)

场景 1:FastAPI 接口参数(高频)

搭配参数校验、说明、示例

python

运行

from fastapi import FastAPI from typing import Annotated app = FastAPI() @app.get("/user") def read_user( age: Annotated[int, "用户年龄", 0, 120] ): return {"age": age}

场景 2:Pydantic 数据模型校验

结合Field做约束:

python

运行

from pydantic import BaseModel, Field from typing import Annotated # 类型 + 校验规则 + 描述 Score = Annotated[float, Field(ge=0, le=100, description="考试分数")] class Student(BaseModel): name: str score: Score

场景 3:类型别名复用

统一规范全局类型:

python

运行

from typing import Annotated Phone = Annotated[str, "手机号,11位数字"] Email = Annotated[str, "标准邮箱格式"] class User: phone: Phone email: Email

五、取值元数据(运行时读取附加信息)

__metadata__属性获取:

python

运行

from typing import Annotated Info = Annotated[int, "数值类型", 100] # 取出所有附加元数据 print(Info.__metadata__) # ('数值类型', 100) # 取出基础类型 print(Info.__origin__) # <class 'int'>

六、版本说明

  1. Python 3.9:正式加入typing.Annotated
  2. Python 3.8 及以下:需安装typing_extensions

    bash

    运行

    pip install typing-extensions
    导入改为:

    python

    运行

    from typing_extensions import Annotated

七、总结口诀

  • 格式:Annotated[原类型, 附加信息...]
  • 作用:给类型打标签、加规则、写文档
  • 本质:原类型不变,元数据供框架解析
  • 主力场景:FastAPI、Pydantic、静态类型文档
http://www.jsqmd.com/news/978612/

相关文章:

  • 2026年iPhone17护眼钢化膜推荐:悟赫德测评
  • 从握手协议到FIFO:聊聊单bit跨时钟域那些‘高级’但实用的玩法
  • 从无人机到智能手表:EVB_Air551G定位模块在5个真实物联网项目中的接线与数据应用实战
  • 别再死记硬背了!用Python实战微分方程,搞定人口预测与传染病模型
  • Figma-to-JSON 架构深度解析:企业级设计数据化解决方案
  • AKStream:高效实用的全平台软NVR流媒体管理解决方案
  • 别再只跑nvcc -V了!CUDA安装后,用这5种方法彻底验证你的GPU开发环境
  • 每日一个开源项目(第125篇):taste-skill - 给 AI 装上审美,让前端不再千篇一律
  • 3分钟免费解锁Grammarly Premium高级版完整指南:开源工具助你零成本提升写作质量
  • SerialPlot隐藏技巧:如何用一条串口数据线,同时绘制多路传感器波形?
  • 避开dsPIC33 ADC同时采样的那些坑:MUXA/B配置与缓冲区管理详解
  • Qt 进阶 06|图形视图框架 QGraphicsScene/QGraphicsView 图元与交互
  • 51单片机+Proteus超声波测距:从公式推导到代码实现的保姆级复盘(含定时器配置详解)
  • 保姆级教程:用TTL线免拆机刷写电信悦ME IHO-3000高安版固件(附全部分区表解析)
  • 告别EEPROM!用GD32F303片内FLASH实现参数存储:以保存ADC校准值与系统状态为例
  • 智能游戏插件HunterPie:怪物猎人世界终极战斗助手完全指南
  • 接口自动化框架搭建实录:我是如何用Pytest+Requests管理上百个API测试用例的
  • 从家庭Wi-Fi到企业无线组网:一文搞懂FAT AP、FIT AP和AC到底该怎么选
  • 告别缺货烦恼:手把手教你用AGM AG256SL100替代Altera EPM240T100C5N(附引脚兼容对照表)
  • 别再死记硬背了!用大白话和例子讲透BatchNorm和LayerNorm的区别
  • 如何快速掌握GmSSL:国密算法与安全通信的终极指南
  • 【VGGT】统一3D重建:单网络同时预测相机位姿、深度图、点云与3D轨迹的前馈Transformer架构深度解析
  • Java毕设实战资源:SpringBoot+Vue超市进销存系统(含数据库脚本、论文、答辩PPT与部署指南)
  • 别再傻傻分不清了!一文搞懂SDRAM、DDR、FLASH、ROM的区别与选型
  • Step 3.7 Flash开源模型实测 – 多模态 Agent 大脑更省Token
  • STM32F4实战:手把手教你移植SOEM 1.4.0驱动EtherCAT伺服(附源码与调试心得)
  • 2026年退火铁板实测评测:山东小草彩钢卷/山东小草彩钢扳/山东小草板/山东小草钢卷/山东彩涂卷/山东彩涂板/山东彩涂钢卷/选择指南 - 优质品牌商家
  • CANopen SDO通信原理拆解:以STM32F4读取一个16位变量为例,看懂每一帧数据
  • 脑白质粘弹性建模与分数阶微积分应用
  • 5mm铝板超声导波A0/S0模态计算与能量分布可视化MATLAB工具集