用來建立列表的表達式函數
示例:對象
import os print([x for x in range(20) if x % 2 == 0]) print([d for d in os.listdir('.') if not d.startswith('.') and not d.startswith('__')]) # 字典 print([k + '=' + str(v) for k,v in {'a' : 1, 'b' : 2}.items()]) #items能夠同時迭代key和value
{k:v for k,v in self.items() if not k.startswith('_')}
若是一個列表很是大,那麼建立這個列表須要耗費較大的內存.生成器不會建立完整列表,只會在調用的時候計算出合適的值返回給調用方.blog
(x for x in range(20) if x % 2 == 0)
def get(): for x in range(10): yield x
a = get_generator() print(next(a))
for ge in get_generator(): print(ge)
能夠被next()函數調用並不斷返回下一個值的對象稱爲迭代器內存
一類是集合數據類型,如list、tuple、dict、set、str等;
一類是generator,包括生成器和帶yield的generator function。get
如:generator
from collections.abc import Iterator str_a = 'hello world' print(isinstance(str_a, Iterator)) print(isinstance(iter(str_a), Iterator))
輸出:
False
Trueit
凡是可做用於for循環的對象都是Iterable類型;
凡是可做用於next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列;
集合數據類型如list、dict、str等是Iterable但不是Iterator,能夠經過iter()函數得到一個Iterator對象。io