我一直在尝试编写使用全局变量的Python脚本。我在我的代码中得到了意外的结果。我没有在此处转储所有代码,而是创建了一小段代码来显示我所看到的内容。
def func1():
global aaa
aaa = 1
def func2():
while aaa < 5:
print(aaa)
aaa += 1
func1()
func2()
我希望得到,
1
2
3
4
我得到的是,
Traceback (most recent call last):
File "test2.py", line 11, in <module>
func2()
File "test2.py", line 6, in func2
while aaa < 5:
UnboundLocalError: local variable 'aaa' referenced before assignment
如果我更改func2来删除while循环并仅打印aaa变量,它将正常工作,因此可以访问全局变量。
def func1():
global aaa
aaa = 1
def func2():
print(aaa)
func1()
func2()
运行它会产生,
1
如果我在func2的顶部设置aaa值,它也可以使用。
def func1():
global aaa
aaa = 1
def func2():
aaa = 1
while aaa < 5:
print(aaa)
aaa += 1
func1()
func2()
导致的结果,
1
2
3
4
我有Perl的经验,但是对Python还是陌生的。我在这里缺少什么吗?
global
声明此变量要链接到此上下文之外的同名变量,以更改其值。您已针对func1
完成了此操作,但尚未针对func2
完成此操作。
由于func2
会更改声明为aaa
的not的变量global
,因此该变量必须是局部变量。当您尝试在aaa
语句中引用本地if
时,会收到指示的运行时错误。
在您后面的示例中,func2
所做的[[不是更改aaa
,引用print(aaa)
是完全合法的。由于没有本地aaa
,Python在下一个上下文中向外搜索,并找到由aaa
声明的全局func1
。