`reveal_type` 输出中的星号是啥意思?
Posted
技术标签:
【中文标题】`reveal_type` 输出中的星号是啥意思?【英文标题】:What does the asterisk in the output of `reveal_type` mean?`reveal_type` 输出中的星号是什么意思? 【发布时间】:2018-11-03 01:05:40 【问题描述】: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*
有什么区别?
【问题讨论】:
【参考方案1】:这意味着 mypy 推断出特定类型作为执行类型变量替换的一部分。
例如,blah[0]
实际上是在做blah.__getitem__(0)
:原来__getitem__
方法被定义为返回一些_T
类型的值,其中_T
是列表中包含的任何类型* .
Mypy 理解 blah
包含整数,因此推断 _T
返回类型是 int
类型。
相比之下,只有1
和blah[0] * 2
不会进行类型变量推断。前者是字面意思;后者正在调用int.__mul__(...)
方法,该方法的类型是专门返回一个int。
*嗯,这实际上不是确切的签名,但足够接近。
在大多数情况下,您可以忽略这一点,并将其视为 mypy 的实现细节。它之所以存在,主要是因为当您修补或调试 mypy 内部时,能够判断是否推断出某个类型有时很有用。
【讨论】:
以上是关于`reveal_type` 输出中的星号是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
XAML ColumnDefinition 中的 *(星号)是啥意思?