杨辉三角生成器(generator)

生成器(generator)作为可迭代对象,在很多地方得到应用。它与普通函数比较大的区别是yield语句的应用,使得它能够一边循环一边计算。比如说,在你对一个列表中的元素进行循环处理时,列表会实时更新。列表的长度、赋值都是和循环周期同步的,也就不会碰到由于列表长度不可变而不能实时更新计算值的问题。比如,杨辉三角生成器代码如下:

def triangle(x):
  l=(i for i in range(x))
  l_t=[]
  k=0
  for i in l:
      l_t.append(i)
      l_r=[]
      for i in l_t:
          l_r.append(i)
      k += 1
      print('第'+str(k)+'个列表')
      for j in range(len(l_t)):
          if j==0:
              l_r[j]=1
          if 0<j<len(l_t)-1:
              l_r[j]=l_t[j-1]+l_t[j]
          if j==len(l_t)-1:
              l_r[j]=1
      l_t=[]
      for i in l_r:
          l_t.append(i)
      yield l_r

for i in triangle(9):
    print(i)
    

在以上的代码中,yield语句相当于生成器的中断点。生成器的运行默认是从上一个yield开始到下一个yield为止,如果只有一个yield语句,则到该yield结束。
在使用next()调用生成器时,如果一个函数有三个以上yield语句,当上一次的运行在第二个yield语句结束时,下一次运行会将第二个yield语句作为起始点,这个特性和中断点也非常像。拥有了这个特性之后,函数就获得了记忆功能,从哪里结束还可以从哪里开始。
next()相当于单步执行,实际应用中一般用for语句调用生成器,如以上就是用for语句调用了9次该生成器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值