python迭代器和生成器笔记

本文深入探讨了Python中生成器的概念,解释了如何使用生成器节省内存空间,特别是在处理大型数据集时的优势。通过对比列表和生成器,文章详细介绍了生成器的工作原理,包括其在循环过程中的动态数据生成机制,并提供了斐波那契数列生成器的实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生成器
通过列表生成器,我们可以直接创建一个列表,但是,受到内存限制,列表容量是有限的。
所以,如果列表元素可以按某种算法推出,那我们是否可以在循环过程中不断推出后续元素呢?这样就不必创建完整的list,从而节省大量内存空间,在python中,这种一边计算的机制,称为生成器:generator:

要创建一个列表
在这里插入图片描述
在这里插入图片描述
生成器只有一个__next__()方法,只记录当前数据,不能返回上一个数据
我们创建一个generator后,基本上不会调用next()函数,而是通过for循环来迭代它,并且不需要关心StopIteration错误

如斐波那契数列Fibonacci:
1,1,2,3,5,8.。。。。
斐波那契数列不能用列表生成式写出,但用函数却很容易打印出来

"""

生成器

"""

def fib(max):
    n,a,b=0,0,1
    while n<max:
        print(b)
        a,b=b,a+b
        n+=1

    return "done"

注意此处的 a,b=b,a+b
意思是: t=(a,a+b)
a=t[0]. b=t[1]

将上述的函数变为生成器只有一步之遥,只需把print(b)改为:yield b


"""

生成器

"""

def fib(max):
    n,a,b=0,0,1
    while n<max:
        #print(b)
        yield b
        a,b=b,a+b
        n+=1

    return "done"

fib_generator=fib(100)
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())

运行结果:
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3 /Users/li/Desktop/pythonproject/day01列表.py
1
1
2
3

Process finished with exit code 0

dadsa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值