在后面《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的一篇问答