在类型提示中使用冒号“:”

Use of colon ':' in type hints

当类型注释一个 dict 类型的变量时,通常你会像这样注释它:

numeralToInteger: dict[str, int] = {...}

但是我用冒号而不是逗号重写了这个:

numeralToInteger: dict[str : int] = {...}

这也有效,不会引发 SyntaxError 或 NameError。

检查 __annotations__ 全局变量后:

colon: dict[str : int] = {...}
comma: dict[str, int] = {...}

print(__annotations__)

输出为:

{'colon': dict[slice(<class 'str'>, <class 'int'>, None)],
 'comma': dict[str, int]}

因此冒号被视为切片对象,逗号被视为普通类型提示。

我应该在 dict 类型中使用冒号还是应该坚持使用逗号?

我正在使用 Python 版本 3.10.1。

对于 dict[str:int],您传递的提示是 dict,其键是切片,因为 x:y 是 python 中的 slice

dict[str, int] 传递正确的键和值提示,以前也有 typing.Dict 但它已被弃用。

如果你有一个字典,它的键是字符串,值是整数,你应该dict[str, int]。这不是可选的。 IDE 和类型检查器使用这些类型提示来帮助您。当你说 dict[str : int] 时,它是一个切片对象。完全不同的东西。

mypy playground 中尝试这些:

d: dict[str, int]
d = {'hi': 20}

c: dict[str: int]
c = {'hi': 20}

留言:

main.py:4: error: "dict" expects 2 type arguments, but 1 given
main.py:4: error: Invalid type comment or annotation
main.py:4: note: did you mean to use ',' instead of ':' ?
Found 2 errors in 1 file (checked 1 source file)

错误消息说明一切