在类型提示中使用冒号“:”
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)
错误消息说明一切
当类型注释一个 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)
错误消息说明一切