`reveal_type` 输出中的星号是什么意思?
What does the asterisk in the output of `reveal_type` mean?
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__
方法被定义为return类型_T
的某个值,其中 _T
是列表中包含的任何类型*。
Mypy 理解 blah
包含整数,因此推断 _T
return 类型是 int
.
类型
相比之下,只有 1
和 blah[0] * 2
没有类型变量推断。前者是字面意思;后者正在调用 int.__mul__(...)
方法,该方法被输入为 return,特别是一个 int.
*好吧,这实际上不是准确的签名,但足够接近了。
在大多数情况下,您可以忽略这一点并将其视为 mypy 的实现细节。它的存在主要是因为在修补或调试 mypy 内部结构时,能够判断一个类型是否被推断有时很有用。
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__
方法被定义为return类型_T
的某个值,其中 _T
是列表中包含的任何类型*。
Mypy 理解 blah
包含整数,因此推断 _T
return 类型是 int
.
相比之下,只有 1
和 blah[0] * 2
没有类型变量推断。前者是字面意思;后者正在调用 int.__mul__(...)
方法,该方法被输入为 return,特别是一个 int.
*好吧,这实际上不是准确的签名,但足够接近了。
在大多数情况下,您可以忽略这一点并将其视为 mypy 的实现细节。它的存在主要是因为在修补或调试 mypy 内部结构时,能够判断一个类型是否被推断有时很有用。