命名空间和范围

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

以下代码无法运行: 它给出“ 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”。

python scope namespaces
1个回答
0
投票

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

要从非全局范围(例如您的函数)访问全局变量,您需要在使用它之前使用

global p
声明其用法。

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