一尘不染

Python-使用列表推导只是副作用是Pythonic吗?

python

考虑一下我要调用的函数的副作用,而不是返回值(例如打印到屏幕,更新GUI,打印到文件等)。

def fun_with_side_effects(x):
    ...side effects...
    return y

现在,使用列表推导功能将此功能称为Pythonic:

[fun_with_side_effects(x) for x in y if (...conditions...)]

请注意,我不会将列表保存在任何地方

还是我应该这样称呼这个函数:

for x in y:
    if (...conditions...):
        fun_with_side_effects(x)

哪个更好?为什么?


阅读 351

收藏
2020-02-09

共1个答案

一尘不染

这样做是非常反Python的,任何经验丰富的Pythonista都会为你带来麻烦。中间列表在创建之后就被丢弃了,它可能非常大,因此创建起来很昂贵。

2020-02-09