如果不分配列表理解,效率如何?
在这个问题上,我与一个评论员争论,
for t in threads:
t.join()
会比
[t.join() for t in threads]
撇开“滥用理解力”的问题不谈-
我倾向于同意,但我想为此一口答:我的版本(第二个)的效率(效率)到底如何?在我的情况下,Python会始终实现列表推导吗?还是在内部使用生成器?
会map(lambda t: t.join(), threads)
更有效率吗?还是有另一种方法将该功能应用于列表中的每个元素threads
?
-
列表推导将 始终
产生一个列表对象,在这种情况下,它将包含所有t.join()
调用的返回值。因此,Python为您生成带有None
长度值的列表len(threads)
。Python绝不会尝试优化列表对象的创建。使用时,使用的
map()
效率也没有提高,因为您需要添加额外的堆栈推送lambda
。只要坚持明确的for
循环。确实,对于一系列线程连接,在这里尝试微优化是 没有意义的 。对于非关键代码段,您的可读性受到了损害。
换句话说,我完全同意评论者的意见。不要使用列表推导或
map()
仅用于副作用,而不必自己敲打ENTER
并创建两行代码。引用Python Zen:
- 可读性很重要。
- 可读性很重要。