【发布时间】:2022-01-20 22:29:41
【问题描述】:
当对 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 的隐含用途是将字符串转换为整数,这意味着 dict 具有
str类型的键和int类型的值。因此,在这种情况下,逗号分隔符是正确的类型提示。或者你的钥匙是切片的?我想不会。 -
@RichardNeumann 就可读性而言,将 dict[str : int] 例如视为冒号“表示”它将 str 映射到 int 是有意义的,因为它遵循文字 dict 语法。我猜你正在查看说明类型提示中的值应该用逗号分隔的文档。正如 Mad Physicist 所说,文档还概述了它们对实际的 python 代码没有影响,所以这只是让它纯粹偏爱你想要如何设置它的样式。对我来说更好的问题是“我应该遵守什么约定?”
-
@Magmurrr 不,它没有。它创建一个
slice对象。这不是应该如何使用这种类型提示的。如果您使用类型检查器,它会向您大喊,键不是字符串而是切片。
标签: python python-3.x slice python-typing