为了实现全自动数据处理,但数据的维度又在不断的改变,为了不用每次操心修改代码,会使用到动态新建变量和动态调用动态变量,但网上的资料很含糊,或者不好用,被逼无奈写了本篇文章
一、 动态创建动态变量
1. locals()
调用该函数
names = locals()
新建变量
names['ReImf' + str(0)] = 2
在这之后,就可以直接使用 ReImf0 或者变量,这里我们可以将 0 这个数变成一个变量值,来动态新建变量
for i in range(len(imfs)):
# print(i) 0 12
# 动态生成变量
names['ReImf' + str(i)] = imfs[i]
2. exec()
新建变量
exec("ReImf{} = 2".format(0))
循环新建变量
for i in len_Re:
exec("ReImf{} = 2".format(i))
二、 动态调用动态变量
首先我们先理解一下 exec ,
exec 的意思我认为是把 exec(" ") ,双引号中间的内容当作代码来运行
这样的话,我们就很容易理解该怎么动态的调用我们的变量
# 返回瞬时频率,计算每个 imf 对应的瞬时频率,并确定时间范围
t = np.arange(0,length)
# 动态方法
for i in len_Re:
# print("i:",i)
exec("names['instf'+str(i)],names['timestamps'+str(i)] =tftb.processing.inst_freq(ReImf{} ,t)".format(i))
# 动态拼接所有瞬时频率
for i in len_Re:
# 0 12
if i == 0 or i == 1:
result = np.array([instf0, instf1])
else:
result = np.vstack([result, names.get('instf' + str(i))])
从上门我们可以看出
定义新的动态变量使用 locals(),调用的话使用 exec ,需要主要得有以下一点: