告诉某人“我想对它的副作用将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/