如何使用Python 3.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 我应该改为:

我试图理解如何使用Python3.9类型提示来注释接收具有可选或多个类型值的dict的函数。我知道,通过输入模块,我可以轻松地使用
联合
可选
。但我想知道是否可以仅使用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
不是标准集合。