跳到内容

unnecessary-map (C417)

Derived from the flake8-comprehensions linter. (源自 flake8-comprehensions linter。)

有时提供修复。

作用

检查使用 lambda 函数的不必要的 map() 调用。

为什么这不好?

func 是 lambda 时,使用 map(func, iterable) 比使用生成器表达式或推导式更慢,因为后一种方法避免了函数调用开销,并且更易于阅读。

此规则也适用于 list()set()dict() 调用中的 map() 调用。例如

  • 使用 [num * 2 for num in nums] 而不是 list(map(lambda num: num * 2, nums))
  • 使用 {num % 2 == 0 for num in nums} 而不是 set(map(lambda num: num % 2 == 0, nums))
  • 使用 {v: v ** 2 for v in values} 而不是 dict(map(lambda v: (v, v ** 2), values))

示例

map(lambda x: x + 1, iterable)

建议改为

(x + 1 for x in iterable)

修复安全性

This rule's fix is marked as unsafe, as it may occasionally drop comments when rewriting the call. In most cases, though, comments will be preserved. (此规则的修复被标记为不安全,因为它在重写调用时有时会删除注释。但在大多数情况下,注释将被保留。)