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

如何为Python函数指定输入与返回值关联的条件类型注解?

Python类型注解:实现输入与返回值的关联约束

当然可以实现这种输入类型和返回类型的对应关系,Python的类型系统支持两种常用方式来做到这一点:

方法一:使用@overload装饰器

这是最直观的方案,针对不同的输入类型分别定义函数签名,让类型检查器明确识别输入输出的对应关系:

from typing import overload, str, int, float, list

# 单个字符串/整数输入时的签名
@overload
def get(ids: str | int) -> float:
    ...

# 列表类型输入时的签名
@overload
def get(ids: list[str] | list[int]) -> list[float]:
    ...

# 实际实现的函数体
def get(ids: str | list[str] | int | list[int]) -> float | list[float]:
    if isinstance(ids, list):
        return [float(item) for item in ids]
    return float(ids)

当你传入单个str或int时,类型检查器(如mypy、pyright)会自动推断返回值为float;传入list[str]或list[int]时,会推断返回list[float]。

方法二:结合TypeVar与泛型

如果需要更灵活的泛型约束,可以用TypeVar定义关联类型:

from typing import TypeVar, float, list

# 定义允许的单个元素类型
SingleType = TypeVar('SingleType', str, int)
# 定义允许的列表类型
ListType = TypeVar('ListType', list[str], list[int])

def get(ids: SingleType | ListType) -> float | list[float]:
    if isinstance(ids, list):
        return [float(item) for item in ids]
    return float(ids)

这种方式同样能让类型检查器识别输入输出的对应关系,适合需要扩展更多类型场景的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:05:59