告诉某人“我想对它的副作用将func应用于iterable中的每个元素”的首选方法是什么?

# Option 1... clear, but two lines.
for element in iterable:
    func(element)

# Option 2... even more lines, but could be clearer.
def walk_for_side_effects(iterable):
    for element in iterable:
        pass

walk_for_side_effects(map(func, iterable))  # Assuming Python3's map.

# Option 3... builds up a list, but this how I see everyone doing it.
[func(element) for element in iterable]

我喜欢选项2;标准库中是否有已经等效的函数?

最佳答案

避免聪明的诱惑。使用选项1,其意图是明确而明确的;您正在将函数func()应用于可迭代的每个元素。

选项2只是让所有人感到困惑,寻找walk_for_side_effects应该做什么(这使我感到困惑,直到我意识到您需要遍历Python 3中的map()为止)。

当您实际从func()获得结果时,应该使用选项3,绝不要副作用。杀死任何这样做的人都是为了副作用。列表推导应该用于生成列表,而不是做其他事情。相反,您会更难以理解和维护代码(并且为所有返回值构建列表的启动速度较慢)。

关于python - python映射中的副作用(python "do"块),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14447560/

10-12 21:37