gpt4 book ai didi

python - 生成器函数在内部是如何工作的?

转载 作者:行者123 更新时间:2023-11-28 19:42:31 25 4
gpt4 key购买 nike

下面是一个生成器函数。

def f():
x=1
while 1:
y = yield x
x += y

这个生成器函数 (f) 是否在内部实现,如下所示?

class f(collections.Iterable):
def __init__(self):
self.x = 1
def __iter__(self):
return iter(self)
def __next__(self):
return self.x
def send(self, y):
self.x += y
return self.next()

编辑:

This是我的问题的答案。

最佳答案

在内部,生成器的工作方式与常规函数调用大致相同。在引擎盖下,运行中的生成器和运行中的函数大多使用相同的机器。

当您调用函数或生成器时,会创建堆栈框架。它具有局部变量(包括传递给函数的参数)、一个指向事件操作码的代码指针,以及一个用于挂起的 try block 、with block 或循环的堆栈。

在常规函数中,执行会立即开始。当return遇到,保留最终结果,并释放栈帧及其引用的所有内容。

generator 中函数,栈帧包裹在 generator-iterator 中对象并立即返回。生成器函数中的代码仅在被 next(g)g.send(v) 调用时运行。 yield 时暂停执行遇到了。

理解生成器的一种方式是,它们就像可以用 yield 暂停并用 g.next() 恢复的函数。 stackframe 保持事件状态,因此恢复运行的生成器比进行新的函数调用要便宜得多,后者必须在每次调用时构建一个新的 frame。

关于python - 生成器函数在内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45723893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com