私信  •  关注

Paolo Moretti Mehrdad

Paolo Moretti Mehrdad 最近创建的主题
Paolo Moretti Mehrdad 最近回复了
9 年前
回复了 Paolo Moretti Mehrdad 创建的主题 » 何时在python中使用map()[重复]

你应该用 map filter 而不是列表理解。

客观的 即使它们不是“蟒蛇”,你也应该喜欢它们的原因是:
它们需要函数/lambdas作为参数,而 引入新范围 .

我不止一次被这个咬过:

for x, y in somePoints:
    # (several lines of code here)
    squared = [x ** 2 for x in numbers]
    # Oops, x was silently overwritten!

但如果我说:

for x, y in somePoints:
    # (several lines of code here)
    squared = map(lambda x: x ** 2, numbers)

那一切都会好起来的。

你可以说我在同一个范围内使用相同的变量名是愚蠢的。

我没有。代码本来很好——两个 x S不在同一范围内。
只是在我之后 感动 内部代码块到出现问题的代码的不同部分(读:维护期间的问题,而不是开发期间的问题),我没想到会这样。

对, 如果你从不犯这个错误 然后列表理解更优雅。
但从个人经验(以及看到其他人犯同样的错误)来看,我已经看到它发生了足够多的次数,我认为当这些错误潜入到代码中时,不值得你付出痛苦。

结论:

使用 地图 滤波器 . 它们可以防止与范围相关的细微的难以诊断的错误。

边注:

别忘了考虑使用 imap ifilter itertools )如果他们适合你的情况!