python中eval函数的作用域

python中eval函数的作用域,第1张

python中eval函数的作用域

生成器实现为功能范围:

在类块中定义的名称范围仅限于该类块。它不会扩展到方法的代码块– 包括生成器表达式,因为它们是使用函数作用域实现的

因此,

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}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5668745.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存