26.列表生成式,生成器,斐波那契数列


列表生成式
a=[1,2,3,4,5,6,7,8,9]
a=[i+1 for i in a]
print(a)


生成器 generator
在python中,这种一边循环,一边计算后面元素的机制,称为生成器
列表生成式 [i*i for i in range(10)] 列表元素直接生成,占内存空间
生成器 (i*i for i in range(10))
不生成列表元素,而是生成一个器物,只是生成了一个算法,只有调用一次才产生一个元素。next(),惰性运算,元素next完会报错,而for循环调用生成器,调用完不会报错



斐波那契数列
除第一个和第二个数以外,其余的数都是由前一个数和后一个数相加得到。
a=0
b=1
count=0
while count<20:
temp=a #在给新a赋值之前,先把旧a存储起来,以便b的计算。b=a(旧a# )+b
a=b
b=temp+b
count+=1
print(a,b)


斐波那契数列函数
def fib(n):
a = 0
b = 1
count = 0
while count < n:
temp = a # 在给新a赋值之前,先把旧a存储起来,以便b的计算。b=a(旧a# )+b
a = b
b = temp + b
print(a, b)
count += 1


fib(20)
#斐波那契数列生成器
def fib(n):
a = 0
b = 1
count = 0
while count < n:
temp = a # 在给新a赋值之前,先把旧a存储起来,以便b的计算。b=a(旧a# )+b
a = b
b = temp + b
yield b #暂停,并返回b,直到下一次next调用,执行yield后面的程序
count += 1
# print(a, b)

f=fib(20)
print(f.__next__())
print(f.__next__())
print(f.__next__())
print(f.__next__())
print(f.__next__())
print("---do something else---")# 可以中断函数,执行一段无函数无关代码,然后下次next 继续执行函数
print(f.__next__())
print(f.__next__())
posted @ 2019-09-23 09:32  派森716  阅读(568)  评论(0编辑  收藏  举报