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
相关产品推荐
相关产品推荐

