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

相关文章:

  • 从握手协议到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填空到动态内容生成
  • 用ESP32的GPIO唤醒功能做个低功耗遥控器:Light-sleep模式实战
  • K210四麦阵列实时声源定位方案:含TDOA算法实现、3D动态可视化与裸机部署指南
  • 2026年5月泰州地区专业网站建设服务商排行:兴化geo优化、兴化做网站、兴化网站优化、兴化网站建设、兴化网络公司选择指南 - 优质品牌商家
  • 如何高效使用Jasminum插件:中文文献智能管理的完整实战指南
  • 用STM32F103C8T6和光敏传感器做个环境光检测器(HAL库+ADC+DMA保姆级教程)
  • 别再手动调格式了!Simulink仿真数据用MATLAB plot画图,一键搞定坐标轴字体和样式
  • STM32 HAL库ADC采样老不准?可能是DMA配置踩了坑(F103C8T6实战调试记录)
  • 避坑指南:STM32 HAL库驱动MFRC522读卡失败?可能是这5个地方没配置对
  • RT-Thread Nano 3.1.3 上移植 LWIP 2.1.3 的完整避坑指南:从 sys_arch.c 到内存保护
  • 抖音无水印批量下载终极指南:3分钟快速上手完整教程