生成器实现为功能范围:
在类块中定义的名称范围仅限于该类块。它不会扩展到方法的代码块– 包括生成器表达式,因为它们是使用函数作用域实现的 。
因此,
dict()构造函数内部的生成器具有自己的
locals()字典。现在,让我们来看看
Py_eval的源代码,特别是当这两个
globals()和
locals()是无:
if (globals == Py_None) { globals = Pyeval_GetGlobals(); if (locals == Py_None) locals = Pyeval_GetLocals(); }
因此,对于您的示例
Pyeval_GetLocals(),在循环执行时
globals()将为空,它将成为全局字典。需要注意的是
i,
j与
k该函数中定义不在发电机的局部范围内,而他们是在它的封闭范围:
>>> dict((name,eval(name, globals(), {})) for name in ['i', 'j', 'k']){'i': 7, 'k': 10, 'j': 8}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)