我通常这样做:
[worker.do_work() for worker in workers]
这样做的好处是可读性很强,并且包含在一行中,但是创建了一个我不需要的对象(列表)的问题,这意味着不必要地触发了垃圾收集。
显而易见的替代方案:
for worker in workers:
worker.do_work()
也很可读,但使用两行。
是否有单线方式可以实现相同的结果,而不会创建不必要的对象?
答案 0 :(得分:4)
当然,有。
def doLotsOfWork(wks):
for w in wks:
w.do_work()
现在,你的“一线”:
doLotsOfWork(workers)
简而言之,除了使用for
循环之外,没有“更短”(或更好的方法)。我建议你不要使用列表理解,因为它使用了副作用 - 这就是代码味道。
答案 1 :(得分:0)
" GC"在python中与java完全不同。重新计数减少比标记和扫描便宜得多。对它进行基准测试,然后决定是否过分强调小成本。
要使它成为一个单行,只需定义一个辅助函数,然后它就是一行来调用它。如果方便的话,将函数埋入导入的库中。