如何使用Python 3.9标准注释注释可选的dict键?
我试图理解如何使用Python3.9类型提示来注释接收具有可选或多个类型值的dict的函数。我知道,通过输入模块,我可以轻松地使用如何使用Python 3.9标准注释注释可选的dict键?,python,python-3.x,typing,Python,Python 3.x,Typing,我试图理解如何使用Python3.9类型提示来注释接收具有可选或多个类型值的dict的函数。我知道,通过输入模块,我可以轻松地使用联合和可选。但我想知道是否可以仅使用Python 3.9注释来实现这一点。我在网上找不到这件事的任何线索 参考: 例如: From Typing import Dict, Optional, Union def foo(bar: Dict[Union[str, int], Optional[str]]) -> bool: return True 我应该改为:
联合
和可选
。但我想知道是否可以仅使用Python 3.9注释来实现这一点。我在网上找不到这件事的任何线索
参考:
例如:
From Typing import Dict, Optional, Union
def foo(bar: Dict[Union[str, int], Optional[str]]) -> bool: return True
我应该改为:
from __future__ import annotations
def foo(bar: dict[[str, int], [str, None]) -> bool: return True
没有;Python 3.9中对类型注释的增强不包括使
成为可选的或联合的内置项。您仍然需要从输入中导入这些内容
从开始,您可以使用|
运算符指示联合类型
如果您希望字典具有特定的键/值类型,那么为不同的值提供不同类型的TypedDict
通常比在任何情况下使用复杂的联合类型来覆盖所有值更好。否;Python 3.9中对类型注释的增强不包括使成为可选的或联合的内置项。您仍然需要从输入中导入这些内容
从开始,您可以使用|
运算符指示联合类型
如果您希望字典具有特定的键/值类型,那么为不同的值提供不同类型的TypedDict
通常是一个更好的选择,而不是在任何情况下使用复杂的联合类型来覆盖所有值。简言之,这取决于您的linter。Visual Studio代码现在有一个Python插件v2020.11.371526539,它支持以下语法
from __future__ import annotations
def foo(bar: dict[str | int, str | None]) -> bool | int:
return True
IntelliSense显示一个有用的预览:
对于返回类型:
作为参考,我选择的linter版本是857747d8246cde76501481378a6b7cf2e7072a2c和python版本3.9.0。简而言之,它取决于您的linter。Visual Studio代码现在有一个Python插件v2020.11.371526539,它支持以下语法
from __future__ import annotations
def foo(bar: dict[str | int, str | None]) -> bool | int:
return True
IntelliSense显示一个有用的预览:
对于返回类型:
作为参考,我选择的linter版本是857747d8246cde76501481378a6b7cf2e7072a2c和python版本3.9.0你不能只使用dict而不是dict
?是的,我可以使用dict[str,可选[str]
。但是我想知道是否有任何方法可以使用dict
容器,而不必键入。可选的或键入。Union
,用于注释键和值。不,Union
或可选的不是标准集合。是的,我知道。我的意思是,dict[str,Typing.Optional[str]]
。我想知道我是否可以在不使用Python 3.9中键入的情况下实现同样的效果。不,你不能,因为Union
和Optional
不是标准集合。你不能只使用dict
而不是dict
?是的,我可以使用dict[str,Optional[str]
。但是我想知道是否有任何方法可以使用dict
容器,而不必键入。可选的或键入。Union
,用于注释键和值。不,Union
或可选的不是标准集合。是的,我知道。我的意思是,dict[str,Typing.Optional[str]]
。我想知道我是否可以在不使用Python 3.9no的情况下实现同样的功能,您不能,因为Union
和Optional
不是标准集合。