python exec在局部域中失效的问题
问题
exec是python的内置函数,功能是输入一个字符串参数,然后执行字符串的命令,返回值永远是None
例如
exec("a=233")
print(a)
就会输出233
但是使用过程中会出现问题,在一个函数中,如果没有事先申明a的值,程序就会抛出错误a is not defined
,如果事先申明了,他也只会打印申明的值,不会被exec改变
上网查了原因
在函数里面, 传递给
exec()
的局部范围是拷贝实际局部变量组成的一个字典。 因此,如果exec()
如果执行了修改操作,这种修改后的结果对实际局部变量值是没有影响的
解决方案
def f():
exec("a=233")
print(locals()['a'])
当你调用 locals()
获取局部变量时,你获得的是传递给 exec()
的局部变量的一个拷贝
当然作为locals()
的替代方案,你也可以使用你自己的字典传递给exec()
def f():
a=1
loc={'a':a}
glb={}
exec('b=a+1',glb,loc)
b=loc['b']
print(b)
总的来说还是挺麻烦的,也没太搞懂原理,尽量少用吧
2022/10/27