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

如何用Python Typing定义输入输出类型映射的函数签名?

实现方法

你可以通过两种方式实现这个类型定义,其中@overload重载的方式最直观且能被静态类型检查工具精准识别:

方法一:使用@overload明确多场景类型签名

@overload可以为同一个函数定义不同的输入输出类型对应关系,静态检查工具(如mypy)会根据输入参数类型匹配对应的返回类型:

from typing import overload

@overload
def g(arg: str) -> bool:
    ...

@overload
def g(arg: list[str]) -> list[bool]:
    ...

def g(arg):
    # 示例实现逻辑
    if isinstance(arg, str):
        return len(arg) > 0
    elif isinstance(arg, list):
        return [len(s) > 0 for s in arg]

方法二:使用TypeVar结合联合类型

这种方式用单个类型变量约束输入范围,但返回类型是联合类型,静态检查无法精确推断具体返回类型:

from typing import TypeVar, Union

T = TypeVar('T', str, list[str])
ReturnType = Union[bool, list[bool]]

def g(arg: T) -> ReturnType:
    # 示例实现逻辑
    if isinstance(arg, str):
        return len(arg) > 0
    elif isinstance(arg, list):
        return [len(s) > 0 for s in arg]

如果使用Python 3.10+,可省去typing模块的部分导入,直接用原生类型注解:

from typing import overload

@overload
def g(arg: str) -> bool:
    ...

@overload
def g(arg: list[str]) -> list[bool]:
    ...

def g(arg):
    if isinstance(arg, str):
        return len(arg) > 0
    elif isinstance(arg, list):
        return [len(s) > 0 for s in arg]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:55:22