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