Python 生成器(generator)的坑(把每一行看做一个list,试写一个generator,不断输出下一行的list)

本文探讨了Python生成器的工作原理及其与普通函数的区别,特别是在处理序列时遇到的问题。作者通过一个杨辉三角的例子,展示了一个生成器在不断输出下一行列表时出现的意料之外的结果,并提供了修正后的代码以正确实现预期功能。
摘要由CSDN通过智能技术生成

生成器(generator)是一种“惰性”的算法生成器,比起列表生成式的一次性生成,他仅仅是将生成规则保存在生成器函数中(generator function),遇到next()计算并返回下一次的生成值,起到了节省内存空间的作用。

最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。


下面一小段的代码遇到一个问题,百思不得其解,还请懂的师傅告知小弟原因。

Q:把每一行看做一个list,试写一个generator,不断输出下一行的list。
代码就是做这件事的。

def triangles():  
    L = [1]
    while True:     
        yield L   
        L.append(0) 
        L = [L[i - 1] + L[i] for i in range(len(L))]

def main():
    n = 0
    results = []
    for x in triangles():
        print(x)
        results.append(x)
        n = n + 1
        if n == 10:
            break

    if results == [
        [1],
        [
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值