首页 >后端开发 >Python教程 >为什么 Python 3 中的 exec 不能直接更新局部变量?

为什么 Python 3 中的 exec 不能直接更新局部变量?

Patricia Arquette
Patricia Arquette原创
2024-12-20 19:54:12809浏览

Why Can't `exec` Directly Update Local Variables in Python 3?

如何无法直接使用 exec 更新局部变量

Python 中的 exec 调用是动态执行代码的强大工具,但是它对局部变量的修改有限制。

考虑以下内容code:

def f():
    a = 1
    exec("a = 3")
    print(a)

f()

人们可能期望这段代码打印 3,但它实际上打印 1。这是因为在 Python 3 中,局部变量不是存储在字典中,而是存储在编译时确定索引的数组中时间。 exec 函数无法在不干扰此优化的情况下安全地修改局部变量。

解决方案:使用 Local Dictionary 与 exec

要使用 exec 修改局部变量,您需要显式传递本地字典。例如:

def foo():
    ldict = {}
    exec("a = 3", globals(), ldict)
    a = ldict['a']
    print(a)

这会执行本地字典 (ldict) 中的代码,这与函数的本地变量数组不同。然后可以通过访问本地字典将修改后的变量返回到函数的作用域。

Python 2 行为

在 Python 2 中,exec 可以修改局部变量而无需传递显式字典,因为它将使用不带全局/本地参数的 exec 的命名空间视为“未优化”。然而,Python 3 中并非如此。

因此,请务必记住,在使用 exec 时,只能通过创建和传递本地字典来更新局部变量,以避免与编译器的优化发生任何潜在冲突.

以上是为什么 Python 3 中的 exec 不能直接更新局部变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn