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

Python Typing Hints如何复用单个Vector别名替代两个不同的Vector别名

解决方案

完全可以通过泛型类型别名实现单个Vector复用,不需要分别定义两个类型别名,核心是借助TypeVar声明泛型占位符,修改后的代码逻辑如下:

  1. 首先声明无边界的泛型类型变量T,作为Vector存储元素的类型占位
  2. 把Vector定义为接收泛型参数的联合类型,适配列表、集合、元组、冻结集合四类容器
  3. 使用时给Vector传入对应的元素类型参数即可,不需要重复定义别名

补充说明:你原有代码中Tuple[Number]的写法仅代表只有单个数值的元组,如果需要适配任意长度的同类型元素元组,要改为Tuple[T, ...]的写法,...表示任意数量的前置类型元素。

修改后的完整代码:

from typing import Union, TypeVar, List, Set, Tuple, FrozenSet

Number = Union[int, float]
# 声明泛型占位符
T = TypeVar('T')
# 定义泛型Vector类型别名,可适配任意元素类型的四类容器
Vector = Union[List[T], Set[T], Tuple[T, ...], FrozenSet[T]]

def mean(vector: Vector[Number]) -> Number:
    return sum(vector) / len(vector)

def readPrint(vector: Vector[str]) -> None:
    for i in vector:
        print(i)

如果你需要限制Vector只能接收数值或字符串类型的元素,也可以给TypeVar加上边界约束:T = TypeVar('T', bound=Union[Number, str]),避免其他不兼容类型被错误传入。


内容的提问来源于stack exchange,提问作者Amâncio de Noronha Brito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:27:03