【发布时间】:2018-11-02 01:29:06
【问题描述】:
如果函数是在执行代码之外定义的(因此已经绑定到不同的__globals__),是否可以从函数内部访问执行提供的全局字典?
换句话说,有没有办法让下面的例子工作?
def f():
log("Hi")
exec('f()', {'f': f, 'log': print})
一般来说,是否可以替换函数的__globals__?
【问题讨论】:
-
很遗憾,您没有提供有关该问题的任何上下文。那么,为什么不只使用
exec('log = print; f()')?然后这个例子就起作用了。 -
可能存在多种情况,其中替换函数的全局变量可能是有意义的。假设我对在提供新的(或重新定义现有的)全局函数或变量的环境中执行代码感兴趣。假设我希望这些定义适用于任何外部代码,例如通过导入拉入脚本。不过,总的来说,我最感兴趣的是对问题的答案完全符合所述 - “是否有可能以某种方式访问 exec 提供的全局变量?”
标签: python python-3.x python-exec