使用列表推导式实现副作用:非 Python 实践
Python 的列表推导式是基于现有可迭代对象创建新列表的强大工具。虽然它们提供了简洁且富有表现力的语法,但仅因为其副作用而使用列表推导式被认为是反 Python 的。
问题
考虑一个执行副作用的函数,例如例如打印到屏幕、更新 GUI 或写入文件。它返回一个值,但该值通常不令人感兴趣。
def fun_with_side_effects(x): ...side effects... return y
人们可能会想使用列表理解来调用此函数以获取其副作用,如下所示:
[fun_with_side_effects(x) for x in y if (...conditions...)]
请注意,结果列表未分配给变量。
反Pythonic Nature
强烈建议不要以这种方式使用列表推导式,原因如下:
首选方法
首选方法是使用 for 循环迭代可迭代对象并调用仅在必要时才使用副作用函数:
for x in y: if (...conditions...): fun_with_side_effects(x)
这种方法更高效、更惯用、更不易混淆。这清楚地表明该函数被调用主要是因为它的副作用。
以上是在 Python 中使用列表推导式来产生副作用是否被认为是不好的做法?的详细内容。更多信息请关注PHP中文网其他相关文章!