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

Python是否有类似TypeScript typeof或C++ decltype的类型获取机制?

复用已有函数类型作为回调注解的Python等价方案

我们有一个类似reduce的函数,它接收一个combiner回调函数。如果已经存在示例回调函数exampleReducer,我们希望避免手动编写回调的类型注解,直接复用exampleReducer的类型。

C++中的实现方式

在C++中,可以通过decltype获取exampleReducer的类型:

#include <iostream>
#include <vector>
using namespace std;;

float exampleReducer(float x, float y) {
    return x+y;
}

auto reduce(decltype(exampleReducer) reducer, vector<float> numbers) { 
    auto result = numbers[0];
    for (auto x: numbers)
        result = reducer(result, x);
    return result;
};

int main() {
    std::cout << reduce([](float x, float y) {return x/y;}, {1,2,3,4,5});
}

TypeScript中的实现方式

在TypeScript中,使用typeof即可实现:

const exampleReducer = (x: number, y: number) => x+y;

const reduce = (reducer: typeof exampleReducer, numbers: number[]) => {
    let result = numbers[0];
    numbers.forEach((n) => { result = reducer(result, n);})
    return result
}

console.log(reduce((x, y) => x/y, [1,2,3,4,5]))

Python中的疑问

已知Python 3.11的typing模块新增了reveal_type函数(typing-extensions中已可用),但其文档说明:

当静态类型检查器遇到该函数调用时,会输出参数类型的诊断信息。

这表明类型检查器可以推导类型,但reveal_type仅用于调试。那Python是否存在等价机制,能将exampleReducer的类型直接用作类型注解?

示例代码如下,需要填充reduce函数中reducer参数的类型注解:

def exampleReducer(x: float, y: float): 
    return x+y;

def reduce(reducer: ???what goes here??? exampleReducer, numbers: list[float]):
    result = numbers[0];
    for n in numbers:
        result = reducer(result, n)
    return result

print(reduce(lambda x, y: x/y, [1,2,3,4,5]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:45:42