小编典典

如果不分配列表理解,效率如何?

python

在这个问题上,我与一个评论员争论,

for t in threads:
    t.join()

会比

[t.join() for t in threads]

撇开“滥用理解力”的问题不谈-
我倾向于同意,但我想为此一口答:我的版本(第二个)的效率(效率)到底如何?在我的情况下,Python会始终实现列表推导吗?还是在内部使用生成器?

map(lambda t: t.join(), threads)更有效率吗?还是有另一种方法将该功能应用于列表中的每个元素threads


阅读 272

收藏
2021-01-20

共1个答案

小编典典

列表推导将 始终
产生一个列表对象,在这种情况下,它将包含所有t.join()调用的返回值。因此,Python为您生成带有None长度值的列表len(threads)。Python绝不会尝试优化列表对象的创建。

使用时,使用的map()效率也没有提高,因为您需要添加额外的堆栈推送lambda。只要坚持明确的for循环。

确实,对于一系列线程连接,在这里尝试微优化是 没有意义的 。对于非关键代码段,您的可读性受到了损害。

换句话说,我完全同意评论者的意见。不要使用列表推导或map()仅用于副作用,而不必自己敲打ENTER并创建两行代码。

引用Python Zen

  • 可读性很重要。
2021-01-20