生成器、迭代器
一个函数中出现了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)

浙公网安备 33010602011771号