You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python 3.9-3.10中创建带可变参数的typing.Annotated实例

在Python 3.9-3.10中处理Annotated的可变参数需求

一、创建带可变元数据的Annotated实例

Python 3.11支持Annotated[int, *a]的语法,但3.9-3.10不用搞循环嵌套,直接利用类型构造函数的参数展开就能实现,代码简洁直接:

from typing import Annotated

a = [1, 2, 3]
# 直接解包元数据列表创建Annotated实例
annotated_type = Annotated[int, *a]

这个写法和Python 3.11的Annotated[int, *a]效果完全一致。

二、提取原始类型和元数据并重建Annotated实例

Annotated类型自带两个可直接调用的公共属性,用来提取信息再重建非常方便:

  • __origin__:对应原始类型(比如示例里的int)
  • __args__:包含原始类型+所有元数据的元组,第一个元素是原始类型,后续都是元数据

具体代码如下:

# 假设已有一个Annotated实例
existing_annotated = Annotated[int, 1, 2, 3]

# 提取原始类型和元数据
raw_type = existing_annotated.__origin__
metadata = existing_annotated.__args__[1:]  # 从第二个元素开始取元数据

# 重新创建Annotated实例
recreated_annotated = Annotated[raw_type, *metadata]

验证一下的话,print(recreated_annotated == existing_annotated)会输出True,说明重建成功。

注意事项

  • 确保Python版本在3.9及以上,因为Annotated是3.9才纳入标准库的
  • __origin__和__args__是PEP 484定义的泛型类型标准属性,属于稳定用法,不用担心兼容性问题

内容的提问来源于stack exchange,提问作者wRAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:07:05