與生成器函數一樣,生成器表達式也是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
'''