我确信这已经被问到并得到了答复,但我没有具体找到它:
我只是选择了Python,我不理解变量范围问题。
我已将问题简化为以下内容:
案例1:
def lev1():
exec("aaa=123")
print("lev1:",aaa)
lev1()
案例2:
def lev1():
global aaa
exec("aaa=123")
print("lev1:",aaa)
lev1()
案例3:
def lev1():
exec("global aaa ; aaa=123")
print("lev1:",aaa)
lev1()
Case 1
和Case 2
在print语句中未定义aaa
。 Case 3
有效。 aaa
和Case 1
中实际存在Case 2
的位置?aaa
声明,是否可以在案例1中访问global
?答案 0 :(得分:7)
来自docs:
注意:默认的 locals 的行为与下面的函数
locals()
相同:对默认 locals 字典的修改不应该是尝试。如果您需要在函数exec()
返回后查看代码对 locals 的影响,请传递一个显式的 locals 字典。
换句话说,如果你用一个参数调用exec
,你就不应该尝试分配任何变量,而且Python不承诺如果你尝试会发生什么。
您可以通过明确传递exec
将globals()
已分配的代码分配给全局变量。 (使用明确的globals
dict且没有明确的locals
dict,exec
将对全局变量和本地变量使用相同的dict。)
def lev1():
exec("aaa=123", globals())
print("lev1:", aaa)
lev1()