关于python:Python动态执行代码修改命名空间

5次阅读

共计 334 个字符,预计需要花费 1 分钟才能阅读完成。

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

正文完
 0