Python中不存在“yield对全局this的兜底表现”,因其无this、无严格/非严格模式,生成器状态保存在自身对象内,与执行上下文绑定无关。

这个问题在 Python 中不成立,因为 yield 是 Python 的关键字,Generator 函数是 Python 的语法机制,不存在“非严格模式”或“全局 this 对象”的概念。
你提到的“非严格模式”“全局 this”“兜底表现内核”等术语,全部来自 JavaScript 语言规范(ECMAScript),和 Python 的 yield 完全无关。Python 没有 this、没有严格/非严格模式、没有基于执行上下文的 this 绑定机制,也没有“全局对象兜底”这一行为(Python 的全局作用域是模块级的 globals(),与函数内部的 self 或闭包逻辑也无直接关联)。
为什么容易混淆?
常见误解来源有三:
- 把 JavaScript 的 Generator(如
function*+yield)和 Python 的生成器函数(def+yield)当成同一机制——二者名字相似、目标类似(惰性迭代),但底层模型、执行语义、运行时环境完全不同; - 看到“generator”“yield”“this”“strict mode”等词同时出现,误以为属于同一技术栈;
- 部分中文资料未严格区分语言边界,用 JS 的术语解释 Python 特性,造成概念污染。
Python 生成器中根本不存在 this 或全局对象绑定问题
Python 的生成器函数执行时:
- 局部变量、指令指针、栈帧状态全部保存在生成器对象内部(
gen.gi_frame可查),不依赖任何“执行上下文对象”; - 没有
this,也没有self(除非显式定义为方法);普通生成器函数是裸函数,调用时无隐式接收者; - 全局作用域就是当前模块的
globals()字典,它始终可访问,但不会因yield暂停而“丢失”或“重绑定”; -
yield暂停时,函数帧(frame)被冻结并挂载到生成器对象上,恢复时原封不动继续——这个过程与任何“对象绑定”或“上下文切换”无关。
如果你实际想问的是 JavaScript Generator
那需要明确切换语言上下文:
- JS 中,普通函数里
this在非严格模式下默认指向全局对象(浏览器是window,Node 是globalThis); - 但 Generator 函数(
function*)本身也是函数,其内部yield执行时,并不改变this绑定规则;this值仍由调用方式决定(如gen()vsobj.gen()),yield本身不触发重新绑定; - JS Generator 的“状态机”保存的是迭代进度和局部变量,不保存或干预
this值——它只是继承外层执行上下文的this。
所以,无论从 Python 还是 JavaScript 角度,“yield 执行时对全局 this 的兜底表现”都不是一个有效命题。关键先厘清:你在用哪门语言?目标场景是什么?

















