我试图在函数中使用函数exec声明python变量。例如:
def func():
varnames = ['x', 'y', 'z']
vals = [5,5,'abc']
exec(varnames[0] + '=vals[0]')
print(x)
func()
导致错误:
NameError: global name 'x' is not defined
然而,确实是这样的情况,' x'在本地人()
def func():
varnames = ['x', 'y', 'z']
vals = [5,5,'abc']
exec(varnames[0] + '=vals[0]')
print(locals())
func()
结果:
{'vals': [5, 5, 'abc'], 'x': 5, 'varnames': ['x', 'y', 'z']}
显示x存在于本地名称空间中。知道为什么会这样,或者我怎么能绕过它?
答案 0 :(得分:3)
您可以通过将func()
函数中的print语句从print(x)
更改为print(locals()['x'])
来解决此问题。您的代码现在看起来如下所示。 (在Python 3.3.4上测试)在python 2和3之间" exec"命令从语句更改为更改范围的函数。
def func():
varnames = ['x','y','z']
vals = [5,5, 'abc']
exec(varnames[1] + '=vals[1]')
print(locals()['y'])