生成器表达式
生成器表达式(Generator Expressions), 是一个对象, 他执行的结果和以前学习的列表推导类似, 但会迭代的生成结果.
他的语法也与列表类似, 只是需要把以前的[]
换成()
语法:
it = (express for iteme in iterator)
def foo(n):
for i in range(1, n + 1):
yield i
# foo(20)返回的迭代器生成一个新的迭代器
it = (x * x for x in foo(20))
for y in it:
print(y)
生成器表达式和列表的差异
从写法上来看,生成器表达式使用()
, 而列表用[]
. 但是他们之间还是有很重要的差异.
他们的主要区别在于其中的元素(数据)的生成时间不同!
列表创建成功之后, 那么他里面的元素也已经创建成功, 而且是实实在在的占据着内存! 也就是说, 从物理上来看他们已经存在了.
而生成器表达式不一样, 仅仅是创建了一个生成器而已, 那些元素还没有创建. 只有当你使用
for
或者next()
的时候才会根据需要来创建元素.所以, 生成器不能可能有添加, 删除等这些方法.
如果数据量比较大的时候, 使用生成器表达式的性能要好于列表.
列表推倒只能生成列表, 而生成器表达式可以根据需要生成任何类型的序列.