最近《Effective Python》看的章节都是关于生成器的,于是写一篇总结一下生成器的用法。
生成器(generator)相较于迭代器,最大的优点是惰性计算。也就是说如果要计算的序列很长或者说无限长,使用迭代器则一次计算所有结果,就会导致内存爆炸。这种情况下就只能使用生成器,逐个计算,对内存的需求大大降低。
需要什么就生成什么,而不是一次输出所有结果。
除了使用函数搭配yield使用生成器以外,也可以直接用小括号定义生成器。
另外提一嘴,注意区分列表,字典,元组,集合分别是怎么定义的。
需要注意的是,tuple是用小括号表示,但是字典和集合都是大括号表示。直接写a = {}定义的是字典,而定义集合时只能用b = set()而不能直接用大括号。
通过itertools的方法可以将不同的可迭代对象连接。只不过字典只能取出key,不能取出value。
还可以通过嵌套函数的方法对生成器进行过滤。假定我们想要取出0到100中大于21的奇数,通过层层嵌套函数过滤,最终可以筛选出想要的值。