我确信这个问题已经被问过并得到回答,但我找不到具体的:
我刚刚开始学习Python,但我不明白变量作用域问题.
我已将问题简化为以下内容:
Case 1:
def lev1():
exec("aaa=123")
print("lev1:",aaa)
lev1()
Case 2:
def lev1():
global aaa
exec("aaa=123")
print("lev1:",aaa)
lev1()
Case 3:
def lev1():
exec("global aaa ; aaa=123")
print("lev1:",aaa)
lev1()
-
Case 1
and Case 2
have aaa
打印语句中未定义。
-
Case 3
作品。哪里有aaa
实际上存在于Case 1
and Case 2
?
- 有没有办法访问
aaa
在情况 1 中没有global
宣言?
来自docs:
Note:默认locals按照功能描述进行操作locals()如下:对默认值的修改locals不应尝试字典。通过明确的locals如果您需要查看代码的效果,请查看字典locals后功能exec()返回。
换句话说,如果你打电话exec
对于一个参数,你不应该尝试分配任何变量,并且 Python 不承诺如果你尝试分配会发生什么。
您可以拥有exec
通过传递代码分配给全局变量globals()
明确地。 (带有明确的globals
字典并且没有明确的locals
dict, exec
将为全局变量和局部变量使用相同的字典。)
def lev1():
exec("aaa=123", globals())
print("lev1:", aaa)
lev1()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)