生成器、迭代器

一个函数中出现了yield,就变成了一个生成器函数

def test():

  yield 1

  yield 2

  

#r获取了一个生成器,只是获取,还没生成

r = test()

  

#只是调用运行一个生成器函数,其内部是不执行的,只有对其内部进行循环的时候,内部才执行

#执行生成器的__next__()方法,就会执行生成器函数内部的内容,一旦遇到yield就不再执行,返回yield结果,并保存运行位置,下一个next接着上次的位置往下执行

ret = r.__next__()

 

例子:

def xrange(n):

  start = 0

  while True:

    if start > n:

      return

    yield start

    start += 1

obj = xrange()
n1 = obj.__next__()

n2 = obj.__next__()

n3 = obj.__next__()

n4 = obj.__next__()

n5 = obj.__next__()

n6 = obj.__next__()

print(n1,n2,n3,n4,n5,n6)

输出:0,1,2,3,4,5

  

生成器具有一种生成的能力,生成之后,可用迭代器逐个访问,迭代器是具有一种访问能力的对象

迭代器的特点:

无需关心其内部结构,仅需通过next()方法不断去取下一个内容

不能随机访问集合中的某个值,只能从头到尾依次访问

访问到一半时不能往回退

便于循环比较打的数据集合,节省内存

用的时候一般用for循环去迭代一个生成器,例如用for循环上面定义的xrange生成器函数:

for i in xrange(5):

  print(i) 

  

 

 

 

posted @ 2018-08-30 12:43  greenfan  阅读(89)  评论(0)    收藏  举报