是否可以从函数内访问 exec 提供的全局字典?

如果函数是在 exec 代码之外定义的(因此已经绑定到不同的__globals__),是否可以从函数内部访问 exec 提供的全局字典?


换句话说,有没有办法让下面的例子工作?


def f():

    log("Hi")


exec('f()', {'f': f, 'log': print})

一般来说,是否可以替换__globals__函数的 ?


qq_遁去的一_1
浏览 125回答 2
2回答

德玛西亚99

不确定我的解释是否完全正确。简而言之,该示例无法在 Python 3 中运行。原因是 2 种情况的组合:[1] -exec是 Python 3 中的函数,[2] - 您尝试执行的代码包含函数调用。当您为globals函数提供可选参数时,exec它是该函数的局部作用域。所以下面的例子有效:exec('log("Hi")', {'log': print})但是原版没有。因为在原始示例中,您调用了函数f. 它有自己的本地范围。Python 是做什么的?它检查全局作用域(程序的实际全局作用域)和最内层作用域(函数的局部作用域f)。两个范围都缺少log,你得到NameError.您可以使用两个常规函数获得完全相同的行为(相同的错误):def f():    log("Hi")def f_():    log = print    f()f_()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python