命名空间与作用域

1 投票
1 回答
16 浏览
提问于 2025-04-14 17:25

下面的代码无法运行:它给出了“UnboundLocalError: 在赋值之前引用了局部变量'p'”的错误。

p="hello"
def z():
    if p == "hello":
        p="2"
        print(p)
z()

但是这段代码可以正常工作,我感到困惑!在这两种情况下,我都是在一个函数内部给变量赋值。那应该是局部变量吧?所以上面的代码也应该打印出2才对。

p="hello"
def z():
    p="2"
    print(p)
z()

输出: "2"

这个也能正常工作

p="hello"
def z():
    if p == "hello":
        x="2"
        print(x)
z()

输出 = 2

我没有预料到会出现“在赋值之前引用了局部变量'p'”的错误。

1 个回答

1

p 是一个全局变量,因为它是在全局范围内定义的。

如果你想在一个非全局的范围,比如在你的函数里,给这个全局变量赋值,你需要在使用它之前声明一下,写上 global p

想了解更多关于 global 这个关键词的信息,可以查看 这个链接

撰写回答