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

Python 为什么将枚举函数结果传递给dict构造函数会产生类型警告?,python,dictionary,pycharm,enumerate,Python,Dictionary,Pycharm,Enumerate,考虑以下两种dict声明: some_data = [4, 5, 6] d1 = dict(enumerate(some_data)) d2 = dict((x, y) for x, y in enumerate(some_data)) enumerate()的返回值是一个enumerate对象,我理解它就像一个生成器(如果它实际上不是一个实际的生成器),它生成int的元组,以及传递到enumerate()的iterable元素的类型 因此,d1和d2将在上述代码之后以相同的值结束,我要说的是

考虑以下两种
dict
声明:

some_data = [4, 5, 6]
d1 = dict(enumerate(some_data))
d2 = dict((x, y) for x, y in enumerate(some_data))
enumerate()
的返回值是一个
enumerate对象
,我理解它就像一个生成器(如果它实际上不是一个实际的生成器),它生成
int
的元组,以及传递到
enumerate()
的iterable元素的类型

因此,
d1
d2
将在上述代码之后以相同的值结束,我要说的是
d2
声明是不必要地设置另一个生成器,从
enumerate()
函数结果中提取数据,并在不修改的情况下生成它

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

意外类型:(枚举[int])可能的类型:(映射)(Iterable[Tuple[Any,Any]])
检查信息:此检查检测函数调用表达式中的类型错误。由于动态分派和duck类型,这在有限但有用的情况下是可能的。函数参数的类型可以在docstring或Python 3函数注释中指定。”

为什么会这样?这是否是
enumerate()
定义中的疏忽,它实际上是一种
Iterable[Tuple[Any,Any]]
?毕竟,它会产生
[int,Any]
的元组,并且它的可计算性与通过调用生成器创建的元组一样


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

这是一个已知的错误,请投票支持(在标题附近竖起大拇指)