带有生成器表达式的 Python for 循环对于已经存在的字典是否值得?

问题描述

我有一个模拟器程序,它可以循环遍历现有字典中的所有对象。字典包含数十万个对象,每个对象都有功能属性

我想知道为每个循环创建生成器表达式的速度/内存权衡如何,这是否比简单地遍历字典中的值更好。对于许多循环,循环内还会有一个 if 语句。

简单的 for 循环和 if 语句示例:

exit

生成器表达式示例:

for obj in dict.values():
    if obj.attr or n.state=='value':
        obj.someFunction()

所以我真正想知道的是:在这里创建一个生成器有什么意义吗?或者这是否只需要更多时间并增加复杂性,因为字典已经存在于内存中? 我对使用的时间做了一些测试,这个程序的差异似乎可以忽略不计,所以我最感兴趣的是可能的内存使用情况。

解决方法

使用这样的生成器根本没有任何优势。两种变体都需要在 dict.values() 上迭代,都需要通过 if n.attr or n.state=='value' 进行过滤——生成器仅增加生成器对象本身和额外的内部迭代的开销。
虽然这种开销很小,但实际上没有任何优势。

选择带有 for 语句的显式 if 语句。性能和可读性都更好。