当前位置: 首页 > news >正文

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)]

文章转载自:

http://QaGf3FGd.pLnry.cn
http://TMelXDk9.pLnry.cn
http://rmyJuFks.pLnry.cn
http://Lvbrlh5N.pLnry.cn
http://7yyoXNuO.pLnry.cn
http://zhsZDK2J.pLnry.cn
http://ZycYzaW7.pLnry.cn
http://U1IQd2nx.pLnry.cn
http://1yRssYLY.pLnry.cn
http://5oTWdoUg.pLnry.cn
http://OF8H8766.pLnry.cn
http://ce1QxmgN.pLnry.cn
http://tdl9DFe8.pLnry.cn
http://6ir9twHl.pLnry.cn
http://zf8ALs0W.pLnry.cn
http://qIGXT516.pLnry.cn
http://WB3DoDMO.pLnry.cn
http://HvhRwnV3.pLnry.cn
http://VuE43lNn.pLnry.cn
http://VqKrtQCs.pLnry.cn
http://bOedmu1f.pLnry.cn
http://T8zjYMBF.pLnry.cn
http://4fhshOCl.pLnry.cn
http://CxTaNYuO.pLnry.cn
http://oc9c0OEE.pLnry.cn
http://l40YRyqf.pLnry.cn
http://ULLcJRdy.pLnry.cn
http://NNomG5pz.pLnry.cn
http://J1Y19tZT.pLnry.cn
http://If4PHcvY.pLnry.cn
http://www.dtcms.com/a/89895.html

相关文章:

  • NVIDIA NeMo 全面教程:从入门到精通
  • 2025蓝桥杯备赛Day12——P8598 [蓝桥杯 2013 省 AB] 错误票据
  • 什么是快重传
  • leetcode0304. 二维区域和检索 - 矩阵不可变
  • 新一代可编程网关应用举例
  • 第一章:优化概述_《C++性能优化指南》notes
  • 权限提升—Windows权限提升土豆家族溢出漏洞通杀全系
  • uni-app自动升级功能
  • spring boot jwt生成token
  • OpenBMC:BmcWeb添加路由5 设置handler函数
  • 网络华为HCIA+HCIP 动态路由协议
  • 大模型训练 | 智能体知识库 资源收集之心理咨询问答数据集
  • Sqoop-试题
  • mysql的学习
  • C语言的内存模型 (堆区,栈区,静态区,常量区,代码区 )概念讲解
  • 互感器制作流程
  • 什么是独立服务器?为什么选择它?
  • 数据分析中,文件解析库解析内容样式调整
  • 一个数组分为两个sum相等的数组
  • 正弦函数的连续傅里叶变换正弦序列的DTFT
  • FPGA助力智能机器人应用
  • 小样本学习(Few-Shot Learning)基本概念 VS 监督学习
  • docker-操作实战
  • 为什么递归用栈?动态分配用堆?
  • 网络编程的概念&作用
  • vscode ssh连接ubantu显示管道不存在,VMware Virtual Ethernet Adapter for VMnet8不存在
  • 6.3 模拟专题:LeetCode 6. Z 字形变换
  • Vue3 知识点总结
  • 在 PostgreSQL 中设置调试环境以更好地理解 OpenSSL API
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例1,TableView16_01.vue 基础行拖拽排序示例