1)Python赋值运算:
今天写一个斐波那契函数时,遇到数列前后的推导:
第一部分,常规写法:
#for 循环:
def fbn(num):
a0=0
a1=1
for i in range(num):
a1=a0+a1
print('第'+str(i)+'项'+';A0+A1='+str(a1)+';A0='+str(a0)+';A1='+str(a1))
a0=a1-a0 #特别要注意该处的顺序#
return(a1)
fbn(5)
#第0项;A0+A1=1;A0=1;A1=1
#第1项;A0+A1=2;A0=1;A1=2
#第2项;A0+A1=3;A0=2;A1=3
#第3项;A0+A1=5;A0=3;A1=5
#第4项;A0+A1=8;A0=5;A1=8
#while 循环:
def fbn_w(num):
a0,a1=0,1
i=0
while i < num:
# a1=a0+a1
# print('第'+str(i)+'项'+';A0+A1='+str(a1)+';A0='+str(a0)+';A1='+str(a1))
# a0=a1-a0
# i+=1
a0,a1=a1,a0+a1
#多个对象赋值,先按照加号的优先级,然后计算等式右边的,计算完右边后再依次顺序赋值给左边
print('第'+str(i)+'项'+';A0+A1='+str(a1)+';A0='+str(a0)+';A1='+str(a1))
i+=1
return(a1)
fbn_w(5)
第二部分,生成器写法,生成器通过调用,提升速度和效率;
适用场景:一边循环一遍调用计算;
#while 循环生成器:
def fbn_yd(num):
a0,a1=0,1
i=0
while i < num:
yield a1
a0,a1=a1,a0+a1
print('第'+str(i)+'项'+';A0+A1='+str(a1)+';A0='+str(a0)+';A1='+str(a1))
i+=1
yd=fbn_yd(5)
#Out[3]: <generator object fbn_yd at 0x000000000B927410>
next(yd)
for i in yd:
print(i)