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
and int*
?
这意味着 mypy 在执行类型变量替换时推断出特定类型。
例如,blah[0]
实际上正在做blah.__getitem__(0)
: 事实证明,__getitem__
方法被定义为返回某种类型的值_T
, where _T
是列表中包含的任何类型*。
Mypy 明白这一点blah
包含整数,因此推断_T
返回类型是类型int
.
相比之下,仅使用类型变量推断就不会发生1
and blah[0] * 2
。前者是字面意思;后者正在调用int.__mul__(...)
方法,其类型明确返回一个 int。
*Well, that's not actually the exact signature, but close enough.
大多数情况下,您可以忽略这一点并将其视为 mypy 的实现细节。它的存在主要是因为当您修补或调试 mypy 内部时,能够判断类型是否被推断有时很有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)