键入 - 函数 return 值类型与表达式类型相同
Typing - function return value type same as a type of an expression
考虑代码:
def foo() -> ??:
return bar()
怎么说我要foo
的return类型和bar()
的return类型一样呢?
在 C++ 中,我可以使用 decltype
,类似于:
auto foo() -> decltype(bar()) {
return bar();
}
我找不到 Python 的等效项。有没有?
Python 的内置类型库允许创建 custom types,您可以描述一个新类型 class 并将两个函数与此 class 耦合为 return值。
如果定义了bar
,您可以访问它的签名
In [1] from inspect import signature
In [2]: def bar(a: int) -> float:
...: return float(a)
...:
In [3]: def foo(a: int) -> signature(bar).return_annotation:
...: return bar(a)
...:
In [4]: signature(foo)
Out[4]: <Signature (a: int) -> float>
话虽这么说,但我不确定您是否需要这样做来进行静态类型检查,因为可以从 bar
推断出 foo
的 return 类型' s(至少 PyCharm 的静态分析器倾向于这样做)。
考虑代码:
def foo() -> ??:
return bar()
怎么说我要foo
的return类型和bar()
的return类型一样呢?
在 C++ 中,我可以使用 decltype
,类似于:
auto foo() -> decltype(bar()) {
return bar();
}
我找不到 Python 的等效项。有没有?
Python 的内置类型库允许创建 custom types,您可以描述一个新类型 class 并将两个函数与此 class 耦合为 return值。
如果定义了bar
,您可以访问它的签名
In [1] from inspect import signature
In [2]: def bar(a: int) -> float:
...: return float(a)
...:
In [3]: def foo(a: int) -> signature(bar).return_annotation:
...: return bar(a)
...:
In [4]: signature(foo)
Out[4]: <Signature (a: int) -> float>
话虽这么说,但我不确定您是否需要这样做来进行静态类型检查,因为可以从 bar
推断出 foo
的 return 类型' s(至少 PyCharm 的静态分析器倾向于这样做)。