`reveal_type`输出中的星号是什么意思?

Eri*_*rik 7 python types mypy

reveal_type(1) # Revealed type is 'builtins.int'
bla = [1,2,3]
reveal_type(bla[0]) # Revealed type is 'builtins.int*'
reveal_type(bla[0] * 2) # Revealed type is 'builtins.int'
Run Code Online (Sandbox Code Playgroud)

int和之间有什么区别int*

Mic*_*x2a 6

这意味着mypy推断出特定类型是执行类型变量替换的一部分。

例如,blah[0]实际上在做blah.__getitem__(0):事实证明,该__getitem__方法已定义为返回type的某个值_T,其中_Tlist *中包含的任何类型。

Mypy理解其中blah包含ints,因此推断出_T返回类型为type int

相反,just 1和没有进行类型变量推断blah[0] * 2。前者是文字。后者正在调用该int.__mul__(...)方法,该方法的类型专门返回一个int值。

*嗯,这实际上不是确切的签名,但足够接近。


在大多数情况下,您可以忽略它,而只是将其视为mypy的实现细节。之所以存在它,主要是因为在修改或调试mypy内部时,偶尔可以知道是否推断出一种类型。