0

在 python3.3 中:

x = 1
print('global x =', x)
def f():
    exec('x=2')
    #x = 2
    print('local in f() x =', x)
    def g():
        print('local in g() x =', x)
    g()

f()

在 python3.3 为什么结果是这样的:

    global x = 1
    local in f() x = 1
    local in g() x = 1

任何人都可以告诉我为什么 exec('x=2') in not equal x=2

'x=2' 和 exec('x=2') 有什么区别?

3倍

4

1 回答 1

1

函数中的局部变量在编译时经过高度优化和确定,存储在框架上的数组中。每个本地名称只是字节码中的一个索引,索引到该数组。

exec()另一方面,尝试将 locals 视为可写字典,但在函数内部,返回的字典locals()连接到函数的实际 locals 数组。您不能使用.exec()

引用locals()函数文档:

注意:不得修改本词典的内容;更改可能不会影响解释器使用的局部变量和自由变量的值。

并从exec()功能

注意:默认本地人的行为如下所述:不应尝试locals()修改默认本地人字典。如果您需要在函数返回后查看代码对局部变量的影响,请传递显式局部变量字典。exec()

当您x = 2在函数内部添加该行时,x编译器将确定为本地。

于 2014-01-28T15:24:42.997 回答