可以将函数的返回类型在其他地方作为类型使用吗?

3 投票
1 回答
58 浏览
提问于 2025-04-13 21:14

我有一个回调函数,它需要另一个函数的结果作为输入。请问有没有办法直接引用那个函数的返回类型?现在我是用一个类型别名来定义返回类型,这样在两个地方都能用,但感觉这样不太理想。像C++中的 std::result_of 这样的东西在Python里有吗?

当前代码

from typing import Tuple

func_return = Tuple[int, int]
def func() -> func_return:
    return 1, 1

def call_back(arg: func_return) -> int:
    a, b = arg
    return a + b

理想代码

from typing import Tuple

def func() -> Tuple[int, int]:
    return 1, 1

def call_back(arg: return_type(func)) -> int:
    a, b = arg
    return a + b

1 个回答

5

不行,因为 call_back 只关心 ,而不在乎这个值是哪个函数产生的。call_back 接收一个值,而提供正确类型的值是调用者的责任,不管他们是否使用函数来生成这个值。

要关注 类型,而不是产生或接受这种类型值的函数。

IntPair = Tuple[int, int]

def func() -> IntPair:
    return 1, 1

def call_back(arg: IntPair) -> int:
    a, b = arg
    return a + b

(和你现在的代码一样,但名字更关注类型是什么,而不是它 可能 来自哪里:)

# All legal, all equivalent
call_back(func())
call_back((1, 1))
call_back((1,) + (1,))

撰写回答