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

Python中如何声明不指定返回类型的Callable可调用类型标注

对应场景的三种解决方案

1. 已知所有可能的返回类型场景

你的示例中返回的函数只会返回int或str类型,直接用联合类型标注即可:

from typing import Callable, Union

def funcA() -> int:
  return 2

def funcB() -> str:
  return 'b'

# Python 3.10 以下版本写法
def f(inp: int) -> Callable[[], Union[int, str]]:
  return funcA if inp == 0 else funcB

# Python 3.10+ 可简化为竖线写法
def f(inp: int) -> Callable[[], int | str]:
  return funcA if inp == 0 else funcB

2. 完全无法确定返回类型场景

如果被返回函数的返回类型没有任何规律,直接用Any标注,类型检查工具会跳过对该返回值的校验:

from typing import Callable, Any

def funcA() -> int:
  return 2

def funcB() -> str:
  return 'b'

def f(inp: int) -> Callable[[], Any]:
  return funcA if inp == 0 else funcB

3. 入参和返回类型有固定对应关系场景

如果入参的取值和返回函数的类型存在固定映射,可以用重载+泛型实现更精准的类型推导,调用时类型检查工具会自动匹配对应返回类型:

from typing import Callable, TypeVar, Literal, overload

def funcA() -> int:
  return 2

def funcB() -> str:
  return 'b'

@overload
def f(inp: Literal[0]) -> Callable[[], int]: ...

@overload
def f(inp: Literal[1]) -> Callable[[], str]: ...

def f(inp: int) -> Callable[[], Any]:
  return funcA if inp == 0 else funcB

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:42:01