为什么将枚举函数结果传递给 dict 构造函数会产生类型警告?

Why does passing an enumerate function result to the dict constructor yield a type warning?

考虑这两个 dict 声明:

some_data = [4, 5, 6]
d1 = dict(enumerate(some_data))
d2 = dict((x, y) for x, y in enumerate(some_data))

enumerate() 的 return 值是一个 enumerate object,我理解它就像一个生成器(如果它实际上不是一个实际的生成器)产生的元组int 以及传递给 enumerate() 的可迭代元素的类型是什么。

所以,d1d2 将在上面的代码之后得到相同的值,我会说 d2 声明不必要地设置另一个生成器,从中提取数据enumerate() 函数结果并在不修改的情况下产生它。

但是,像 PyCharm 这样的 IDE 会对 d1 的声明生成警告:

"Unexpected type(s): (enumerate[int]) Possible types: (Mapping) (Iterable[Tuple[Any, Any]])
Inspection info: This inspection detects type errors in function call expressions. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Types of function parameters can be specified in docstrings or in Python 3 function annotations."

这是为什么?这是对 enumerate() 定义的疏忽,它实际上是某种 Iterable[Tuple[Any, Any]] 吗?毕竟它会产生 [int, Any] 的元组,并且它与调用生成器创建的元组一样可迭代?

或者我是否遗漏了一些可能的构造,其中 enumerate() 的结果无法由 dict((Iterable)) 构造函数处理?

这是一个已知错误,请为https://youtrack.jetbrains.com/issue/PY-35037投票(在标题附近竖起大拇指)