gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:18:52 25 4
gpt4 key购买 nike

我尝试在函数的局部范围内使用 eval()。然而它总是在全局范围内评估。

独立的示例:

1-此代码有效:

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

2- 为 lvar1 抛出 NameError

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"])

最佳答案

保存 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()

关于Python:如何在函数的本地范围内运行 eval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36616739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com