一.迭代器
迭代器是访问集合元素的一种方式。迭代器从访问到集合的第一个元素开始访问,直到所有元素被访问结束。而且迭代器只能往前访问,不能后退。另外迭代器的另一个优点,不会事先准备好访问的集合的所有元素。迭代器只有在迭代到某个元素后才会访问元素,而在这之前或之后,元素可以不存在或者销毁,这个特点是他特别适用于访问比较大或者无限的集合。
特点:
1.访问者不需要了解内部结构,仅需通过next()方法不断获取下一个内容
2.不能随机访问集合中的某个元素值,只能从头到尾依次遍历
3.访问到一半时不能回退
4.便于遍历比较大的集合,节省内存
>>> a = iter([1,2,3,4]) >>> a <list_iterator object at 0x10467b3c8> >>> a.__next__() 1 >>> a.__next__() 2 >>> a.__next__() 3 >>> a.__next__() 4 >>> a.__next__() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
二.生成器
一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就变成了生成器
>>> def func(): yield 1 yield 2 yield 3 yield 4 yield 5
上述代码中,当执行func函数时会生成一个生成器
>>> tmp = func() >>> tmp.__next__() 1 >>> tmp.__next__() 2 >>> tmp.__next__() 3 >>> tmp.__next__() 4 >>> tmp.__next__() 5 >>> tmp.__next__() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
项目实战
利用生成器自定义range
def zrange(num): start = -1 while True: start += 1 if start >= num: return else: yield start