JDO*_*own 3 python pycharm nonetype
有什么不同?
myVar: myCustomClassType
Run Code Online (Sandbox Code Playgroud)
对比
myVar: myCustomClassType = None
Run Code Online (Sandbox Code Playgroud)
我问是因为 Pycharm 检查员对后者大喊大叫:
Expected type 'myCustomClassType', got 'None' instead
Run Code Online (Sandbox Code Playgroud)
我知道 None 也是一个对象,因此此检查表明存在类型冲突。我的问题是哪种形式更好?
仅带有注释的名称在语法上是合法的,但实际上并不会创建变量。
>>> foo: int
>>> foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
Run Code Online (Sandbox Code Playgroud)
的正确类型myVar将是Union[myCustomClassType,None]或其等效类型Optional[myCustomClassType],以允许分配None。
from typing import Optional
myVar: Optional[myCustomClassType] = None
Run Code Online (Sandbox Code Playgroud)
有点相关,如果你定义一个像这样的函数
def foo(bar: int = None):
...
Run Code Online (Sandbox Code Playgroud)
mypy将根据分配的默认值默默地“提升” barto的类型。Optional[int]不过,在变量注释的情况下,它似乎没有做同样的事情。PyCharm 似乎也在效仿。
第一个是Variable Annotation的示例,您可以使用类型提示让类型检查器知道将标识符(在特定范围内)与某种类型相关联。
两者的区别在于
myVar: myCustomClassType
Run Code Online (Sandbox Code Playgroud)
不会为 分配任何值myVar,而第二个会。如果您打算myVar拥有一个None值或一个myCustomClassType值,您应该使用模块中的Optional泛型类型typing:
from typing import Optional
myVar: Optional[myCustomClassType]
Run Code Online (Sandbox Code Playgroud)
如果你的变量应该只保存myCustomClassType值,那么你应该使用第一个变量,并确保在使用之前分配一个值。
| 归档时间: |
|
| 查看次数: |
2282 次 |
| 最近记录: |