这是代码:
def test():
c = 0
exec('c = 4 + 5')
print('result', c)
c
的值为0。如何解决该问题,在c
函数中更改exec()
的值?
答案 0 :(得分:1)
在cpython中,您无法在函数内执行所需的操作。这是因为函数的本地名称空间无法通过其他代码轻松编辑(编辑locals()
返回的字典无法做到)。相反,如果您从模块的顶层调用exec
,它将按您希望的那样工作,但这仍然不是一个好主意。
更好的方法可能是使用名称空间字典。您可以将其传递到exec
,更改将显示在此处,而不是显示在函数的本地名称空间或模块的全局名称空间中:
def test():
namespace = {'c': 0}
exec('c = 4 + 5', namespace)
print('result', namespace['c'])