命名空间与作用域
下面的代码无法运行:它给出了“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
这个关键词的信息,可以查看 这个链接。