Python天生器详解

打印 上一主题 下一主题

主题 1849|帖子 1849|积分 5547

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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



  • 详解:
    天生器可以利用函数来创建,天生器函数利用yield关键字来产生值,而不是利用return。天生器可以被iter()、next()和for循环调用。在迭代时,天生器函数会从上一次的yield语句处恢复执行(Python保存了上下文),直到碰到下一个yield语句或函数结束。****
    所以说天生器是一种特殊的迭代器,更高级的迭代器,__iter__和__next__魔法函数由Python主动实现,不需要我们显式界说。
  • 案例
    做视频推理时利用天生器,即一次返回一帧的推理效果,而不是将所有帧的效果放在列表中一次性返回;
    做大语言模型推理时利用天生器,流式输出,而不是等待所有token天生后一次性返回。
  • 语法: 利用 yield 关键字界说天生器函数。
  • 优点: 可以看出,天生器的一个重要特性是懒惰计算,即它只在需要时才天生值。这意味着天生器不会一次性计算所有值并存储在内存中,从而节省了大量内存。
  • 示例:
    1. def fibonacci_generator():
    2.     a, b = 0, 1
    3.     while True:
    4.         yield a
    5.         a, b = b, a + b
    6. def square_generator(iterable):
    7.     for value in iterable:
    8.         yield value * value
    9. #既然说在迭代中每次执行到下一个yield语句,那么可以定义一个最简单形式的生成器
    10. def simple_generator():
    11.     yield 100
    12.     yield 200
    13.     yield 300
    14. if __name__ == '__main__':
    15.     fib = fibonacci_generator()
    16.     for _ in range(10):
    17.         print(next(fib),end=" ")  # 输出: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
    18.     print()  # 换行
    19.     for i in square_generator([1,2,3,4,5]):
    20.         print(i,end=" ") #输出1 4 9 16 25
    21.     print()#换行
    22.     for i in simple_generator():
    23.         print(i, end=" ") # 输出100 200 300
    复制代码
2 天生器表达式与列表推导式

天生器表达式是构建天生器的另一种方式,类似于列表推导式,但利用圆括号 () 而不是方括号 []。
示例:
  1. #通过生成器表达式构建生成器
  2. gen = (x * x for x in range(5))
  3. #普通的列表推导式
  4. l = [x*x for x in range(5)]
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表