在函数参数类型中使用普通 {} 和 typing.Dict 有什么区别?

What is the difference between using plain {} and typing.Dict in function parameters types?

考虑以下功能:

import typing

def foo(dict_1: {}, dict_2: typing.Dict):
    pass

我想知道将 {} 用于 dict_1 和将 typing.Dict 用于 dict_2 作为参数类型是否有任何区别。

我认为没有人应该使用第一种表示法,尽管从技术上讲它没有任何问题。

一个重要的区别是 typing.Dict 支持 [] 符号,该符号也允许类型提示键和值。

另请注意,自 3.9+(参见 PEP585)以来,typing.Dict 已被弃用,因为现在 builtins.dict也支持 [] 表示法。

另一个旁注,但略有 OT,在键入提示函数参数时甚至不应该使用 dicts,因为它们太具体了。 Mapping 之类的摘要更合适,而 dict 显然适合 return 值。