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

发布于 2021-01-29 14:56:30

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

for t in threads:
    t.join()

会比

[t.join() for t in threads]

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

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

关注者
0
被浏览
65
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

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

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

    引用Python Zen

    • 可读性很重要。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看