如何在exec()函数中更改变量的值?

时间:2018-09-07 07:32:30

标签: python-3.x

这是代码:

def test():
    c = 0
    exec('c = 4 + 5')
    print('result', c)

c的值为0。如何解决该问题,在c函数中更改exec()的值?

1 个答案:

答案 0 :(得分:1)

在cpython中,您无法在函数内执行所需的操作。这是因为函数的本地名称空间无法通过其他代码轻松编辑(编辑locals()返回的字典无法做到)。相反,如果您从模块的顶层调用exec,它将按您希望的那样工作,但这仍然不是一个好主意。

更好的方法可能是使用名称空间字典。您可以将其传递到exec,更改将显示在此处,而不是显示在函数的本地名称空间或模块的全局名称空间中:

def test():
    namespace = {'c': 0}
    exec('c = 4 + 5', namespace)
    print('result', namespace['c'])