gpt4 book ai didi

python - 与列表理解相比,生成器表达式做的工作更少吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:17 26 4
gpt4 key购买 nike

在重构一段代码时,我注意到了这一点:

if product_id in [c["id"] for c in self.data.load_products()]:
# Do something

反过来,load_products() 执行 SQL 查询,并且对于每个产品:

  • 执行一些相对占用 CPU 资源的操作,并且:
  • 使用yield将产品一一返回给调用者。

据我所知,列表理解和生成器表达式之间的区别在于,在列表理解的情况下,所有产品都将从数据库加载并处理,即使第一个产品是匹配的。

因此,如果我用这样的生成器表达式替换它:

#                ↴                                          ↴
if product_id in (c["id"] for c in self.data.load_products()):
# Do something

它可以通过最终减少工作量来改进代码,即一旦找到匹配项,就不会从数据库加载下一个产品,也不会对其进行处理。

不过,我不确定我对 Python 不是很了解。

我说的对吗? Python 会在找到匹配项后立即停止,还是两段代码会执行相同的操作并从数据库中加载每个产品?

最佳答案

列表理解将始终运行到最后并将所有结果保存在内存中。

如果使用得当,生成器(表达式或非表达式)可以短路——例如 if product_id in <some generator>确实会在找到匹配项后立即停止,只有在没有匹配项时才会运行到最后。

关于python - 与列表理解相比,生成器表达式做的工作更少吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28688891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com