有什么区别?
myVar: myCustomClassType
vs。
myVar: myCustomClassType = None
我问是因为Pycharm检查员尖叫着后者:
Expected type 'myCustomClassType', got 'None' instead
我知道None也不是对象,因此,此检查表明存在类型冲突。 我的问题是哪种形式更好?
答案 0 :(得分:3)
仅带有注释的名称在语法上是合法的,但实际上并不创建变量。
>>> foo: int
>>> foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
myVar
的正确类型将是Union[myCustomClassType,None]
或等效的Optional[myCustomClassType]
,以允许分配None
。
from typing import Optional
myVar: Optional[myCustomClassType] = None
有些相关,如果您定义类似
的函数def foo(bar: int = None):
...
mypy
将基于分配的默认值将“ bar
”的类型默默地“提升”为Optional[int]
。但是,在变量注释的情况下,它似乎没有做同样的事情。 PyCharm似乎也效仿。
答案 1 :(得分:2)
第一个是Variable Annotation的示例,其中您使用类型提示使类型检查器知道将标识符(在特定范围内)与某种类型相关联。
两者之间的区别在于
myVar: myCustomClassType
不会为myVar
分配任何值,而第二个则为。如果您打算让myVar
具有None
值或myCustomClassType
值,则应使用typing
模块中的Optional
泛型类型:>
from typing import Optional
myVar: Optional[myCustomClassType]
如果您的变量仅应包含myCustomClassType
值,则应使用第一个变量,并确保在使用前分配一个值。
答案 2 :(得分:1)
您需要做
.bin
,不带类型注释。您可以稍后分配一个load_word2vec_format()
实例。