#列表生成式
lis = [x*x for x in range(10)]
print(lis)
#生成器1
generator_ex_1 = (x*x for x in range(10))
#生成器2
def generator_ex_2(max):
n,a,b =0,0,1
while n < max:
yield b
a,b =b,a+b
n = n+1
return 'done'
a = generator_ex_2(10)
print(generator_ex_2(10))
#generator_ex是生成器对象
print(generator_ex)
可以用next(生成器),但是我们一般用for循环来迭代生成器
使用生成器的好处:
1.内存使用更加高效。比如列表是在建立的时候就分配所有的内存空间,而生成器是需要的时候才使用,更像一个记录
2.如果我们要读取并使用的内容远远超过内存,但是需要对所有内容进行处理,那么生成器是一个很好的选择,比如可以让生成器返回当前的处理状态,由于它可以保存状态,那么下一次直接处理即可。
生成器的其他操作,导入迭代器包itertools库
imap
#没有计算,只返回一个迭代对象,普通的map已经计算完毕了,并且返回一个列表
r = itertools.imap(lambda x: x*x, [1, 2, 3])
print(r)
itertools.imap object at 0x103d3ff90>