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

Python能否为获取任意参数首元素的函数添加精确类型标注?

实现get_first函数的精确类型标注

完全可以实现你想要的精确类型标注,利用PEP 646的TypeVarTuple配合Unpack就能做到,核心是让类型检查器捕获每个输入参数的第一个元素类型,并映射到返回元组的对应位置。

完整标注后的代码

from typing import TypeVar, TypeVarTuple, Unpack, Sequence, Tuple

# 定义单个序列的第一个元素类型变量
Elem = TypeVar('Elem')
# 定义类型变量元组,用于捕获所有参数的第一个元素类型集合
Elems = TypeVarTuple('Elems')

def get_first(*args: Unpack[Tuple[Sequence[Elem], ...]]) -> Tuple[Unpack[Elems]]:
    return tuple(a[0] for a in args)

调用验证

当你像这样调用时:

b = (1, 2, 3)
c = ("a", "b", "c", "d")
x = get_first(b, c)

类型检查器(如mypy、pyright)会正确推断出x的类型为Tuple[int, str],完全符合你的预期。

关键说明

  • TypeVarTuple('Elems')用于将每个输入参数的第一个元素类型打包成一个类型元组
  • Unpack[Tuple[Sequence[Elem], ...]]声明接受任意数量的、至少包含一个元素的序列类型参数
  • 返回值Tuple[Unpack[Elems]]则是将捕获到的类型元组展开,生成对应长度和类型的返回元组

需要注意的是,你需要使用支持PEP 646的类型检查器版本,比如mypy 0.910及以上,或者pyright的最新稳定版。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:23:21