迭代器
所谓迭代器,是指具有next方法的对象。注意调用next方式的时候,不需要任何参数。调用next方法时,迭代器会返回它的下一个值。如果迭代器没有值返回,则会抛出StopIteration的异常。
简单示例:
list = [1, 2, 3]
it = list.__iter__() #调用列表的__iter__方法返回一个迭代器
print(it)
>>> it.next()
1
>>> it.next()
2
>>> it.next()
3
>>> it.next()
**
生成器
普通的函数遇到异常和return语句,函数的所有状态都会被清空,再次调用这个函数的时候,所有的局部变量,堆栈信息都会被重新创建。
在Python中,生成器通过生成器函数生成,生成器函数定义方法与普通函数一样,唯一的不同就是使用yield关键字,一次返回一个结果,在每个结果之间挂起与继续他们的状态,来实现循环
def myxrange(n):
print('myxrange beginning!')
i = 0
while i < n:
print("before yield, i is:", i)
yield i
i += 1
print("after yield, i is:", i)
print('myxrange endding!')
1.当调用生成器函数时候,函数返回的,只是一个生成器对象,并没有真正执行里面的逻辑。
2.当next()方法第一次被调用以后,生成器才真正开始工作。一旦遇到yield语句,代码便停止运行。注意此时的停止运行跟return的是不一样的。
3.调用next()方法的时候,返回的是yield处的参数值
4.当继续调用next()方法时,代码将在上一次停止的yield语句处继续执行,并且到下一个yield处停止。
5.一直到后面没有yield语句,最后抛出StopIteration的异常。