迭代器\生成器

print(range(10))

print(xrange(10))

如何把一个函数变成生成器

注意只要函数里边出现了yield,则这个函数就不是普通的函数了,就是生成器函数。

def xrange():

  yield 1

  yield 2

  yield 3

r=xrange()

print(r)

执行这个函数得到一个生成器。

生成器具有生成一些东西的能力

执行函数的时候得到生成器,执行一个生成器的next方法就会得到里面的内容

yield具有保存上一次执行位置的功能。

要注意这里是有几个yield就执行几次next

要注意执行生成器函数的时候,它的内部是不执行的,只有在遇到__next__()的时候它才会这样执行。

执行函数寻找下一个yield,根据生成器找它的yield

一个生成器的第一个next寻找它的第一个yield.

注意如果变成xrange().__next__()、又变成xrange().__next__():注意三次输出的是同一个值,都是第一个yield

要注意的是一旦遇到return整体就退出了。yield的作用就是可以保存上一次的执行状态

def xrange():

      start=0

      while True:

         yield start

          start+=1   

这个里面相当于创建了无穷多个yield。

 

posted @ 2017-02-26 22:16  关泉珍  阅读(30)  评论(0)    收藏  举报