在不创建不需要的对象的情况下遍历列表

时间:2017-10-19 06:05:28

标签: python loops iteration list-comprehension

我通常这样做:

[worker.do_work() for worker in workers]

这样做的好处是可读性很强,并且包含在一行中,但是创建了一个我不需要的对象(列表)的问题,这意味着不必要地触发了垃圾收集。

显而易见的替代方案:

for worker in workers:
    worker.do_work()

也很可读,但使用两行。

是否有单线方式可以实现相同的结果,而不会创建不必要的对象?

2 个答案:

答案 0 :(得分:4)

当然,有。

def doLotsOfWork(wks):
    for w in wks:
        w.do_work()

现在,你的“一线”:

doLotsOfWork(workers)

简而言之,除了使用for循环之外,没有“更短”(或更好的方法)。我建议你不要使用列表理解,因为它使用了副作用 - 这就是代码味道。

答案 1 :(得分:0)

" GC"在python中与java完全不同。重新计数减少比标记和扫描便宜得多。对它进行基准测试,然后决定是否过分强调小成本。

要使它成为一个单行,只需定义一个辅助函数,然后它就是一行来调用它。如果方便的话,将函数埋入导入的库中。