g 为生成器
当数字太多,只需要一个推算规则,而不需要存入数组L时候,可以用生成器来实现
只需要将L的[ ],改成()
[x*x for x in range(10)]
//当数字非常大的时候,用生成器比较划算不用存储
g = (x*x for x in range(10))
//生成生成器,调用next(g)调用计算方法,也可以迭代生成
//next(g)
或
//for n in g
print(n)
打印菲比拉切
这里有一个赋值语句,相当于tuple,
t=(b,a+b)
t[0]=b
t[1]=a+b
这里没有显式定义t
def fib(max)
n,a,b=0,0,1
while n<max
print(b)
a,b=b,a+b
n=n+1
return 'done'
def fib(max)
n,a,b
while n<max
yield b
a,b=b,a+b
n=n+1
return 'done'
下面这个可以运行成功,但是最后的done不会出现,因为是按照推算来进行的,所以需要捕捉异常
while True
try:
t=next(g)
print(t)
except:
stop Iteration as e:
print('generaton return value:',e.value)
break