跳到内容

已重新实现的 starmap (FURB140)

派生自 refurb 代码检查工具。

有时提供修复。

此规则不稳定且处于预览状态。使用需要 --preview 标志。

作用

检查生成器表达式、列表和集合推导式,这些表达式和推导式可以用 itertools.starmap 替换。

为什么这不好?

当从迭代器中解包值以直接传递给函数时,优先使用 itertools.starmap

使用 itertools.starmap 更简洁易读。此外,它比生成器表达式更有效,并且在某些 Python 版本中,它比推导式更有效。

已知问题

自从 Python 3.12 以来,itertools.starmap 的效率低于推导式(#7771)。这是由于 PEP 709,它使推导式更快。

示例

all(predicate(a, b) for a, b in some_iterable)

建议改为

from itertools import starmap


all(starmap(predicate, some_iterable))

参考