生成器表达式

可以使用类似于类似理解的语法创建生成器迭代器。

generator = (i * 2 for i in range(3))

next(generator)  # 0
next(generator)  # 2
next(generator)  # 4
next(generator)  # raises StopIteration

如果函数不一定需要传递给列表,则可以通过在函数调用中放置生成器表达式来保存字符(并提高可读性)。函数调用的括号隐式地使表达式成为生成器表达式。

sum(i ** 2 for i in range(4))  # 0^2 + 1^2 + 2^2 + 3^2 = 0 + 1 + 4 + 9 = 14

此外,你将节省内存,因为生成器允许 Python 根据需要使用值,而不是加载你正在迭代的整个列表(在上面的示例中为 [0, 1, 2, 3])。