python学习笔记-生成器

。我们通过列表生成器可以快速生成列表如下

[x + x for x in range(10)]可以快速生成一个 x+x的列表

受内存限制  我们不便于创建过大的列表,所以我们需要一种新的方式,于是生成器可以很好的帮我们完成

生成器的书写方法 只需要把[]改成()即可 

 g = (x * x for x in range(10))

如果我们想访问里面的数据

next(g)会依次输出,可以使用for循环迭代

for  n in g:

  print(n)即可

def pib(max):
    n, a, b=0,0,1
    while n <max:
        print(b)
        a,b=b,a+b
        n = n+1
    return 'done'

如果想把此代码变成generator只需要把pring(b) 改成yield b即可

然而使用for循环迭代的时候,done也被迭代了

>>> for n in fib(10):
...   print(n)
... 
1
1
...
34
55
d
o
n
e

这就需要我们捕获异常了,

>>> g= pib(10)
>>> while True:
...   try:
...     x = next(g)
...     print('g:',x)
...   except StopIteration as e:
...     print('错误:',e.value)
...     break
... 
g: 1
g: 1
...
g: 21
g: 34
g: 55
错误: done

在教程裴波数列,关于a,b = b,a+b赋值有点疑惑,查询资料后明白了运行机制,记住这一点“先计算后赋值”即可了解其运算规则。

 

最后是作业使用生成器写一个杨辉三角

自己绞尽脑汁也没有想到做法,看了一下网友的有一个代码思路清晰故拷贝下来珍藏代码如下。

L = [1] # 初始值
while True:
     yield(L)
     maxIndex = len(L)-1 # 最大下标,下标从0开始
     # range(0,n)时,取的是0~(n-1)范围的数
     # 第二次获取时,len=1,range(0)=[],因此k=[],L=[1,1]
     # 第三次获取时,len=2,range(0,1)=[0],k=[2],L=[1,2,1]
     # 第四次获取时,len=3,range(0,2)=[0,1],k=[L[0]+L[1],L[1]+L[2]]]=[3,3],L=[1,3,3,1]
     k = [L[j]+L[j+1] for j in range(maxIndex)]
     L = [1]+k+[1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值