UnboundLocalError: local variable ‘rule‘ referenced before assignment
前言
看了很多人说的,都没有说到点上,根本没有解释原因或者解决我的困惑。遂有此篇。
困惑
我们先看两个例子,我问你,下面哪个会报错。
x=[2,3]#全局变量
def a():
print(x)
x[0]=1
a()
x=[2,3]#全局变量
def a():
print(x)
x=1
a()
哈哈,很神奇,第一个不报错,第二个报错。
原因
如果你在一个函数内部,对一个全局变量x进行了赋值,例如下面这种:
x=5
x=[1,2]
x=x+1
那么python会将这个变量认为是函数的局部变量,而不再是全局变量,所以此时,前面如果有代码:
print(x)
就会报错。
应该指出的是,仅限于赋值类型的操作,就是那种开辟新内存,然后这个变量指向了这个地方的这种操作。上面我写的
x=5
x=[1,2]
x=x+1
就是属于这种类型的操作,而对于inplace这种修改操作仍然在原内存中进行,所以这个仍然是全局变量,例如例子1中的。
x[0]=1
这种操作虽然也是赋值,但是不是一般的赋值,是inplace操作,在原内存修改。
解决办法
我们说了原因,精髓都说完了,但是,例如上面的例子2:
x=[2,3]#全局变量
def a():
print(x)
x=1
a()
假如我们就是要先打印全局变量x,然后再赋值呢?那该怎么办,如何完成我们的意图?
解答:既然python认为我们的x是局部变量,那么声明其为
全局变量即可。
x=[2,3]#全局变量
def a():
global x#声明一下哈。
print(x)
x=1
a()
https://blog.csdn.net/qq\_43391414/article/details/124249996