`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'

intint* 有什么区别?

【问题讨论】:

【参考方案1】:

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

例如,blah[0] 实际上是在做blah.__getitem__(0):原来__getitem__ 方法被定义为返回一些_T 类型的值,其中_T 是列表中包含的任何类型* .

Mypy 理解 blah 包含整数,因此推断 _T 返回类型是 int 类型。

相比之下,只有1blah[0] * 2 不会进行类型变量推断。前者是字面意思;后者正在调用int.__mul__(...) 方法,该方法的类型是专门返回一个int。

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


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

【讨论】:

以上是关于`reveal_type` 输出中的星号是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

XAML ColumnDefinition 中的 *(星号)是啥意思?

Ruby 中的 *(星号)是啥意思? [复制]

scanf 格式说明符中的星号是啥意思? [复制]

Android Studio 的版本控制“日志”窗口中的 Author_name*(带星号)是啥意思?

星号 * 在 Python 中是啥意思? [复制]

“[*]”(星号修饰符)在 C 中是啥意思? [复制]