Python生成器详解

观智能其它文章推荐:快来尝鲜!阿里开源3D人体重建模型,单张图片指定动作生成视频

生成器

1 生成器函数**(Generator function)**

  • 详解:

    生成器可以使用函数来创建,生成器函数使用yield关键字来产生值,而不是使用return。生成器可以被iter()、next()和for循环调用。在迭代时,生成器函数会从上一次的yield语句处恢复执行(Python保存了上下文),直到遇到下一个yield语句或函数结束。****
    所以说生成器是一种特殊的迭代器,更高级的迭代器,__iter__和__next__魔法函数由Python自动实现,不需要我们显式定义。

  • 案例

    做视频推理时使用生成器,即一次返回一帧的推理结果,而不是将所有帧的结果放在列表中一次性返回;

    做大语言模型推理时使用生成器,流式输出,而不是等待所有token生成后一次性返回。

  • 语法: 使用 yield 关键字定义生成器函数。

  • 优点: 可以看出,生成器的一个重要特性是懒惰计算,即它只在需要时才生成值。这意味着生成器不会一次性计算所有值并存储在内存中,从而节省了大量内存。

  • 示例:

    def fibonacci_generator():
        a, b = 0, 1
        while True:
            yield a
            a, b = b, a + b
    
    def square_generator(iterable):
        for value in iterable:
            yield value * value
    
    #既然说在迭代中每次执行到下一个yield语句,那么可以定义一个最简单形式的生成器
    def simple_generator():
        yield 100
        yield 200
        yield 300
    
    if __name__ == '__main__':
        fib = fibonacci_generator()
        for _ in range(10):
            print(next(fib),end=" ")  # 输出: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
    
        print()  # 换行
    
        for i in square_generator([1,2,3,4,5]):
            print(i,end=" ") #输出1 4 9 16 25
    
        print()#换行
    
        for i in simple_generator():
            print(i, end=" ") # 输出100 200 300
    

2 生成器表达式与列表推导式

生成器表达式是构建生成器的另一种方式,类似于列表推导式,但使用圆括号 () 而不是方括号 []

示例:

#通过生成器表达式构建生成器
gen = (x * x for x in range(5))

#普通的列表推导式
l = [x*x for x in range(5)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值