如何在CPython中实现生成器和协程?

发布于 2021-01-29 17:56:17

我已经读过在CPython中,解释器堆栈(为此目的而调用的Python函数的列表)与C堆栈(在解释器自己的代码中调用的C函数的列表)混合在一起。如果是这样,那么如何实现生成器和协程?他们如何记住执行状态?CPython是否将每个生成器/协程的堆栈复制到OS堆栈或从OS堆栈复制?还是CPython只是将生成器的最高堆栈帧保留在堆上,因为生成器只能从该最高帧产生?

关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    yield指令将当前正在执行的上下文作为闭包,并将其转换为自己的活动对象。该对象具有__iter__在yield语句之后将继续的方法。

    因此,调用堆栈将转换为堆对象。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看