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

标签 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() 的可迭代元素的类型是什么。

因此,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)) 构造函数处理?

最佳答案

已知bug,请投票https://youtrack.jetbrains.com/issue/PY-35037 (在标题附近竖起大拇指)

关于python - 为什么将枚举函数结果传递给 dict 构造函数会产生类型警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62322540/

相关文章:

python - 在 Python 的 Line2D 中使用属性 "figsize"的等价物是什么

C++如何修改类中另一个类的映射

python - Python dict 的 __hash__ 和 __eq__ 评估的顺序是什么?

pycharm - 无法在 Ubuntu 上的 PyCharm 上启动终端

python - 找不到模块 - 我无法在外部运行使用 PyCharm 开发的 .py 文件

python - 找不到命令 'scrapy'

python:循环的单线笛卡尔积

python - 如何找到神经网络的误报率和漏报率?

java - 不同 JVM 之间共享的映射

python - Pycharm:DLL 加载失败:找不到指定的程序