1.迭代器是访问容器的一种方式,也就是说容器已经出现。我们是从已有元素拓印出一份副本,只为我们此次迭代使用。而生成器则是,而生成器则是本身生成元素的。也就是前者是从有到有的复制,而后者则是从无到有的生成。以 list 容器为例,在使用该容器迭代一组数据时,必须事先将全部数据存储到容器中,才华开始迭代;而生成器却差别,它可以实如今迭代的同时生成元素。
2.在用法上生成器只须要简单函数写法,共同yield就能实现。而迭代器真正开发中很难使用到。我们可以把生成器看做,python给我们提供的特殊接口实现的迭代器。
(2)怎样界说一个生成器
不但云云,生成器的创建方式也比迭代器简单很多,大要分为以下 2 步:
界说一个以 yield 关键字标识返回值的函数;
调用刚刚创建的函数,即可创建一个生成器;
下面的代码分别使用生成器实现range和zip的功能。
def generators(start=0, value=0, step=0): if start > value: raise Exception("开始值不能大于竣事值!") while start < value: yield start start = start+stepfor i in generators(-5,5,2): print(i)list1 = ["a","b","c"]list2 = [1,2,3,4]def my_zip(*lists): min_len = min([len(l) for l in lists]) index=0 while min_len: yield tuple([x[index] for x in lists]) index+=1 min_len-=1dict1 = {}for x,y in my_zip(list1,list2): dict1[x] = yprint(dict1) # {'a': 1, 'b': 2, 'c': 3}