在后面《Python 代码动静执行初探》中讲到过如何用exec和eval函数动静执行代码,也形容了如何限度其命名空间,防止动静代码造成环境“净化”。
不过,有的时候,咱们确实想要让动静代码生成一些部分或全局的定义——比方一个变量名——让原始代码或者前面的动静代码能够持续应用。像上面这样间接定义是无奈失效的:
def f(): a = 1 exec("a = 3") print(a)
此时打印的后果会是1,也就是说exec中对a的批改被抛弃了。不过能够采纳locals参数来取回批改:
def foo(): ldict = {} exec("a=3",globals(),ldict) a = ldict['a'] print(a)
这里的打印后果就是3了。
本文的示例代码取自stack overflow的一篇问答