2024-10-05 21:53:54 发布
网友
当我在定义的函数中有exec()时,它不工作('NameError:name'a'未定义'):
def abc(): qwerty = "a = 2" exec(qwerty) abc() print(a)
但是,当我不使用def时,它会起作用:
qwerty = "a = 2" exec(qwerty) print(a)
我如何“修复”它,或者是否有其他类似的解决方案?(我不能在开始时执行这个操作,我需要在程序中间调用那个函数)
在exec()函数上缺少一个参数
exec()
无法访问exec函数中使用的变量,就好像它们是全局声明的一样
一个解决办法是在exec()中传递两个词典 因此,我通常会这样做。
loc = {} def abc(): qwerty = "a = 2" exec(qwerty, globals(), loc) abc() print(loc['a'])
然后输出2
2
我的答案与@Cyrill的答案相似,但有一些细微的差别。 有3种方法可以调用exec函数:
exec
exec('a = 2')
exec('a = 2', globals())
globals()
exec('a = 2', globals(), loc)
通过使用第二种方法,我们可以在全局命名空间中执行代码,因此:
def abc(): qwerty = 'a = 2' exec(qwerty, globals()) abc() print(a) # outputs 2
在
exec()
函数上缺少一个参数无法访问exec函数中使用的变量,就好像它们是全局声明的一样
一个解决办法是在
exec()
中传递两个词典 因此,我通常会这样做。
然后输出
2
我的答案与@Cyrill的答案相似,但有一些细微的差别。
有3种方法可以调用
exec
函数:exec('a = 2')
。这将在当前范围内执行语句,从而创建一个局部变量李>exec('a = 2', globals())
。这将在supplied全局名称空间中执行语句,该名称空间也是当前全局名称空间(由globals()
返回)。这将改变全局名称空间李>exec('a = 2', globals(), loc)
。这将使用supplied全局名称空间作为全局名称空间,在supplied本地名称空间(第三个参数)中执行语句。这将改变本地名称空间李>通过使用第二种方法,我们可以在全局命名空间中执行代码,因此:
相关问题 更多 >
编程相关推荐