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

时间:2018-05-23 22:53:41

标签: 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'

intint*之间的区别是什么?

1 个答案:

答案 0 :(得分:4)

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

例如,blah[0]实际上正在执行blah.__getitem__(0):事实证明,__getitem__方法定义为返回_T类型的某些值,其中_T }列表中包含的任何类型*。

Mypy了解blah包含整数,因此推断_T返回类型的类型为int

相比之下,只有1blah[0] * 2没有类型变量推断。前者是文字;后者正在调用int.__mul__(...)方法,该方法被输入以特别返回一个int。

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

在大多数情况下,您可以忽略它,并将其视为mypy的实现细节。它的存在主要是因为当你修补或调试mypy内部时,能够判断一个类型是否被推断偶尔会有用。