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*
?
这意味着mypy推断出特定类型是执行类型变量替换的一部分。
例如,blah[0]
实际上在做blah.__getitem__(0)
:事实证明,该__getitem__
方法已定义为返回type的某个值_T
,其中_T
list *中包含的任何类型。
Mypy理解其中blah
包含ints,因此推断出_T
返回类型为type int
。
相反,just 1
和没有进行类型变量推断blah[0] * 2
。前者是文字。后者正在调用该int.__mul__(...)
方法,该方法的类型专门返回一个int值。
*嗯,这实际上不是确切的签名,但足够接近。
在大多数情况下,您可以忽略它,而只是将其视为mypy的实现细节。之所以存在它,主要是因为在修改或调试mypy内部时,偶尔可以知道是否推断出一种类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句