与生成器函数一样,生成器表达式也是Python中的一种延迟工具。
生成器表达式的定义
从语法上,生成器表达式与一般的列表推导式一样,并且支持列表推导的语法(if选择和循环嵌套),不同的是生成器表达式包括在圆括号中,而列表推导式包括在方括号中;并且最重要的区别是:列表推导式是在内存中产生所有的结果集,生成器表达式不在内存中构建结果,而是返回一个生成器对象(支持迭代协议),后面可按需产生值。
# 列表推导式
lst = [x**2 for x in range(4) ]
print(lst)
print('__iter__' in dir(lst))
print('__next__' in dir(lst))
"""
结果:
[0, 1, 4, 9]
True
False
"""
print('*'*30)
# 生成器表达式
gen = (x**2 for x in range(4))
print(gen)
print('__iter__' in dir(gen))
print('__next__' in dir(gen))
"""
结果:
<generator object <genexpr> at 0x00000219FD28EF10>
True
True
"""
print('*'*30)
# 遍历输出
for i in gen:
print(i)
'''
结果:
0
1
4
9
'''