跳到内容

zip-instead-of-pairwise (RUF007)

有时提供修复。

作用

检查是否使用 zip() 迭代连续的元素对。

为什么这不好?

当迭代连续的元素对时,优先使用 itertools.pairwise() 而不是 zip()

itertools.pairwise() 更具可读性,并且更清晰地表达了代码的意图。

示例

letters = "ABCD"
zip(letters, letters[1:])  # ("A", "B"), ("B", "C"), ("C", "D")

建议改为

from itertools import pairwise

letters = "ABCD"
pairwise(letters)  # ("A", "B"), ("B", "C"), ("C", "D")

修复安全性

此修复始终被标记为不安全,因为它假设切片一个对象(例如,obj[1:])会产生与原始对象具有相同类型和迭代行为的值,但对于重写了 __getitem__ 但未正确处理切片的用户自定义类型,则无法保证这一点。此外,此修复可能会删除注释。

参考