Python:如何在函数的本地范围内运行eval()

发布于 2021-01-29 19:33:52

我尝试在函数的局部范围内使用eval()。但是,它始终在全局范围内进行评估。

自包含的示例:

1-此代码有效:

var1 = 1
var2 = 2
var3 = 3    
myDict = dict((name, eval(name)) for name in ["var1",
                                              "var2",
                                              "var3"])
print(myDict["var1"])

2-抛出NameErrorlvar1

def test1():
   lvar1 = 1
   lvar2 = 2
   lvar3 = 3
   myDict = dict((name, eval(name)) for name in ["lvar1",
                                                 "lvar2",
                                                 "lvar3"])
   print(myDict["lvar1"])

3-与2相同的结果。

def test2():
    lvar1 = 1
    lvar2 = 2
    lvar3 = 3
    myDict = dict((name, eval(name), locals()) for name in ["lvar1",
                                                            "lvar2",
                                                            "lvar3"])
    print(myDict["lvar1"])
关注者
0
被浏览
64
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    保存locals()(或vars())调用的结果以返回函数的本地范围。否则,locals()在生成器表达式内部将返回gen-expr的本地范围。

    def test3():
        lvar1 = 1
        lvar2 = 2
        lvar3 = 3
        scope = locals()
        myDict = dict((name, eval(name, scope)) for name in [
                      "lvar1", "lvar2", "lvar3"])
        print(myDict["lvar1"])
    

    顺便说一句,您不需要明确的理解即可构建该命令:

    # copy() avoids quirky, unexpected updates if something else (like a debugger)
    # accesses locals() or f_locals
    myDict = locals().copy()  # or vars().copy()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看