# 生成器函数 函数里面只要有yield关键字,就是一个生成器函数 # 生成器对象也是实现了迭代器协议了的 def gen_func(): yield 1 yield 2 yield 3 def func(): return 1 # 斐波拉契函数 a1 + a2 = a3 # 0,1,1,2,3,5,8,13 def fib(index): ''' :param index: 第index个数 :return: ''' if index == 0: return 0 elif index < 3: return 1 else: return fib(index - 1) + fib(index - 2) def fib1(index): # 这个方式,如果result_list中数据太多,内存撑爆 result_list = [] n, a, b = 0, 0, 1 while n < index: result_list.append(b) a, b = b, a + b n += 1 return result_list def gen_fib(index): # 使用生成器不存在内存撑爆的问题,因为数据是计算一个取一个的 n, a, b = 0, 0, 1 while n < index: yield b a, b = b, a + b n += 1 if __name__ == '__main__': # gen = gen_func() # 返回的是一个生成器对象, 这个对象在python编译子节码就生成了 # for g in gen: # print(g) # 正常的函数 # re = func() print(fib(10)) print(fib1(10)) gen = gen_fib(10) for g in gen: print(g, end=',')
日拱一卒无有尽,功不唐捐终入海