是否有相当于 Typescript `typeof` 或 C++ `decltype` 的 python 语言?

bkh*_*tun 8 python type-hinting

假设我们有一个函数,例如reduce,它接受回调,例如combiner。如果我有一个示例回调函数 ,exampleReducer我希望避免手动编写回调的类型,而使用 的类型exampleReducer

exampleReducer在 C++ 中,我可以使用以下方法获取类型decltype

#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});
}
Run Code Online (Sandbox Code Playgroud)

在打字稿中,我可以使用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]))
Run Code Online (Sandbox Code Playgroud)

我知道 python 3.11 将在模块reveal_type中添加一个函数typing- 已经在 中可用typing-extensions,但文档指出:

当静态类型检查器遇到对此函数的调用时,它会发出带有参数类型的诊断信息。

所以看起来类型检查器可以推断类型,但仅用于调试目的......

是否有一个 python 等效项可以允许使用 的类型exampleReducer作为类型注释?

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]))
Run Code Online (Sandbox Code Playgroud)