# 生成器函数 函数里面只要有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=',')
来源:https://www.cnblogs.com/z-qinfeng/p/12046434.html