项目场景:使用python内置locals函数对已定义变量赋值,无法赋值,但没有报错
使用python内置locals()
函数对已定义变量赋值,无法赋值,但没有报错。程序在控制台里可以成功赋值,但通过函数调用无法赋值
例如:这里需要循环对data0
,data1
, data2
, data3
进行赋值,但locals()[f'data{trial[2]}']
(相当于locals()[data0]
)无法对data0赋值,且没有报错
for n, trial in enumerate(label_train):
if trial[3] == f'00{m+1}':
data_new = []
data_new = locals()[f'subject{m+1}'][f'{trial[1]}'][:] #[22, 1000, 9]
data_new = np.expand_dims(data_new, axis=0)
data_spt = locals()[f'data{trial[2]}']#[1, 22, 1000, 9]
locals()[f'data{trial[2]}'] = np.concatenate((data_spt, data_new), axis=0) #[144, 22, 1000, 9]
locals()[f'label{trial[2]}'].append(trial)
原因分析:
通过locals()
进行赋值时,被赋值的变量也必须通过locals()
函数定义,例如,将代码进行如下修改:
原定义变量代码:
data0 = data1 = data2 = data3 = np.zeros((1, 22, 1000, 9))
修改为:
locals()['data0'] = locals()['data1'] = locals()['data2'] = locals()['data3'] = np.zeros((1, 22, 1000, 9))
之后便可以通过locals()函数对data0
, data1
, data2
, data3
变量赋值了
解决方案:
被赋值的变量必须也通过locals()
函数定义~