Python 3-带while循环的全局变量[重复]

问题描述 投票:0回答:1

我一直在尝试编写使用全局变量的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还是陌生的。我在这里缺少什么吗?

python variables while-loop global
1个回答
1
投票

global声明此变量要链接到此上下文之外的同名变量,以更改其值。您已针对func1完成了此操作,但尚未针对func2完成此操作。

由于func2会更改声明为aaanot的变量global,因此该变量必须是局部变量。当您尝试在aaa语句中引用本地if时,会收到指示的运行时错误。

在您后面的示例中,func2所做的[[不是更改aaa,引用print(aaa)是完全合法的。由于没有本地aaa,Python在下一个上下文中向外搜索,并找到由aaa声明的全局func1

© www.soinside.com 2019 - 2024. All rights reserved.