可以将函数的返回类型在其他地方作为类型使用吗?
我有一个回调函数,它需要另一个函数的结果作为输入。请问有没有办法直接引用那个函数的返回类型?现在我是用一个类型别名来定义返回类型,这样在两个地方都能用,但感觉这样不太理想。像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,))
)