去皮卡多 发表于 2025-3-26 06:52:41

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():
      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 =

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Python天生器详解