#斐波那契数列:1,1,2,3,5,8,13... def fib(times): a = 0 b = 1 n = 1 while n <= times: # print(b) #返回加到F生成器中,每次都叠加 yield b a,b = b,a+b n += 1 return 'done' F = fib(10) # 获取生成器函数返回值,用捕获StopIteration异常 while True: try: print(next(F)) except StopIteration as e: print(e.value) break ''' 总结: 生成器它能返回记住上一次返回时函数体中的位置,对生成器函数的第二次(或第n次), 调用跳转至函数中间yield处,而上次调用的所有的局部变量都保持不变 生成器不仅"记住"数据状态,还记住了它在流程控制构造中的位置 生成器的特点: 1.节约内存 2.保存(上一次的)状态 ''' # print(next(F)) # print(next(F)) # print(next(F)) # print(next(F))#在异常后面显示返回值 # F = fib(7) #F是一个生成器 # print(F) # for i in F: # print(i) ''' yield的作用就把一个函数变成一个生成器,带有yield函数不再是一个普通函数 python解释器会将其视为一个生成器generator,调用fib(7)不会执行fib函数 而是返回一个迭代器对象,在for循环执行时,每次循环都会执行fib函数内部的代码 执行到yield b时,fib函数就返回一个值.下次再调用的时候,其实代码接着由中断代码 接着执行 '''