Python动态执行代码修改命名空间

Posted songofhawk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python动态执行代码修改命名空间相关的知识,希望对你有一定的参考价值。

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

以上是关于Python动态执行代码修改命名空间的主要内容,如果未能解决你的问题,请参考以下文章

scrapy按顺序启动多个爬虫代码片段(python3)

python中怎样查看已加载的命名空间中所有变

命名空间

是否可以动态编译和执行 C# 代码片段?

python--函数进阶

函数补充知识