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'
int
和int*
之间的区别是什么?
答案 0 :(得分:4)
这意味着mypy推断出特定类型是执行类型变量替换的一部分。
例如,blah[0]
实际上正在执行blah.__getitem__(0)
:事实证明,__getitem__
方法定义为返回_T
类型的某些值,其中_T
}列表中包含的任何类型*。
Mypy了解blah
包含整数,因此推断_T
返回类型的类型为int
。
相比之下,只有1
和blah[0] * 2
没有类型变量推断。前者是文字;后者正在调用int.__mul__(...)
方法,该方法被输入以特别返回一个int。
*嗯,这实际上不是确切的签名,但足够接近。
在大多数情况下,您可以忽略它,并将其视为mypy的实现细节。它的存在主要是因为当你修补或调试mypy内部时,能够判断一个类型是否被推断偶尔会有用。