用来建立列表的表达式函数
示例:对象
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