local variable XXX referenced before assignment
有关于局部变量在定义之前使用:
base_MSE = train()
index = 0
def add():
if index>=2:
para[index]*=1.1
else:
para[index]+=1
def sub():
if index>=2:
para[index]/=1.1
else:
para[index]-=1
def transform():
# 对某一参数进行变换,有正面效果则尝试
index = random.randint(0,len(para)-1)
print('changing index: ', index)
add()
new_MSE=train()
if new_MSE>base_MSE: # MSE增加了 UnboundLocalError: local variable 'base_MSE' referenced before assignment
sub()
sub()
new_MSE=train()
if new_MSE>base_MSE:
add()
new_MSE = base_MSE
base_MSE = new_MSE # 使用新的MSE进行更新
base_MSE在transform函数外界定义一次,但在transform函数内部又定义一次,python将优先处理在函数体内的变量,且调用在定义之前,所以在new_MSE>base_MSE报错。
相对而言,index变量仅仅在函数内使用了,没有修改,编译器仅会将此变量看做上层作用域的变量。
因此有两种解决方式:
- 先赋值后调用,base_MSE不能再作为全局变量
- 在函数内部不能进行base_MSE的定义
评论区