Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 遍历列表而不创建不需要的对象_Python_Loops_Iteration_List Comprehension - Fatal编程技术网

Python 遍历列表而不创建不需要的对象

Python 遍历列表而不创建不需要的对象,python,loops,iteration,list-comprehension,Python,Loops,Iteration,List Comprehension,我通常这样做: [worker.do_work() for worker in workers] 这样做的优点是可读性很强,并且只包含在一行中,但是创建一个我不需要的对象(列表)的问题,这意味着垃圾收集会被不必要地触发 显而易见的选择是: for worker in workers: worker.do_work() 也非常可读,但使用两行 在不创建不必要的对象的情况下,是否有一种单行方法可以实现相同的结果?python中的“GC”与java有很大的不同。参考计数递减比标记和扫描便宜

我通常这样做:

[worker.do_work() for worker in workers]
这样做的优点是可读性很强,并且只包含在一行中,但是创建一个我不需要的对象(列表)的问题,这意味着垃圾收集会被不必要地触发

显而易见的选择是:

for worker in workers:
    worker.do_work()
也非常可读,但使用两行

在不创建不必要的对象的情况下,是否有一种单行方法可以实现相同的结果?

python中的“GC”与java有很大的不同。参考计数递减比标记和扫描便宜得多。对其进行基准测试,然后确定您是否过于强调小成本

要使它成为一个单行程序,只需定义一个helper函数,然后用一行代码来调用它。如果方便的话,将函数埋藏在导入的库中。

当然,有

def doLotsOfWork(wks):
    for w in wks:
        w.do_work()
现在,你的“一行”:


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

为什么您关心在一行中执行它?@BrenBarn我经常这样做,我希望代码尽可能精简,同时保持可读性。
对于worker-in-workers:worker.do_-work()
用作一行程序…@KenY-N非PEP8合规性一行程序样式被列为“宁愿不”而不是“绝对不”。您所说的“辅助功能”是什么意思。你能展示一下示例代码吗?没关系,我理解你的意思。我想知道增加函数调用开销是否比踢GC更糟糕。我不明白你为什么会对这样或那样的代价感到疑惑。把它放在凳子上看看。把时间数字贴在这里。哈哈。在这里,我读到了第一行“当然有”@KaushikNP是的,这是一个高潮
doLotsOfWork(workers)