我有一个回调,它接受另一个函数的结果作为输入.有没有方法直接引用函数的返回类型?目前,我将返回类型定义为类型别名,我可以在两个地方使用,但这似乎并不理想.Python中是否存在类似C++的std::result_of

当前代码

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

推荐答案

不,因为call_back只知道/关心value,而不是哪个函数产生值.call_back接受一个值,调用者有责任提供一个正确类型的值,无论他们是否使用函数来产生该值.

关注type,而不是产生或接受该类型值的函数.

IntPair = Tuple[int, int]

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

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

(与您当前的代码相同,但名称侧重于类型是什么,而不是它might来自哪里:

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

)

Python相关问答推荐

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

将jit与numpy linSpace函数一起使用时出错

使用@ guardlasses. guardlass和注释的Python继承

在vscode上使用Python虚拟环境时((env))

Odoo 16使用NTFS使字段只读

将JSON对象转换为Dataframe

Python中的变量每次增加超过1

Django admin Csrf令牌未设置

如何使regex代码只适用于空的目标单元格

基于行条件计算(pandas)

如何将相同组的值添加到嵌套的Pandas Maprame的倒数第二个索引级别

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

在第一次调用时使用不同行为的re. sub的最佳方式

Django在一个不是ForeignKey的字段上加入'

修改.pdb文件中的值并另存为新的

设置索引值每隔17行左右更改的索引

与同步和异步客户端兼容的Python函数

为什么按下按钮后屏幕的 colored颜色 保持不变?

如何通过特定导入在类中执行Python代码

了解如何让库认识到我具有所需的依赖项