Python新手,刚学习一个月。现需要对一堆数据进行管理,想用直观的形式生成变量名方便后续数据处理,如V00,T01,等等,然后用以下这段代码无论如何都报错,求大神解答
def initialize_my_list():
'''首先想生成一系列的元组数据'''
for i in range(0,2):
for j in range(0,2):
locals()['V'+'%s'%i+'%s'%j]=('somedata')
print(locals())#得到了V00,V01,V10等元组,用print检验了没错
T0=[]
T0.append([locals()['V%s%s'%(i,j)] for i in range(0,2) for j in range(0,2)])
#这里思路就是想把上步生成的V00等加入到列表T0中去
然而一运行就报错:
Traceback (most recent call last):
File "deleteok.py", line 24, in <module>
initialize_my_list()
File "deleteok.py", line 22, in initialize_my_list
T0.append([locals()['V%s%s'%(i,j)] for i in range(0,2) for j in range(0,2)])
File "deleteok.py", line 22, in <listcomp>
T0.append([locals()['V%s%s'%(i,j)] for i in range(0,2) for j in range(0,2)])
KeyError: 'V00'
诡异的是如果手打,不用自动生成列表变量名的话就可以,代码如下:
def initialize_my_list():
'''手打一系列的元组数据'''
V00=(120,123,88)
V01=(454,-12,234)
V02=(67,345,852)
V10=(44,12,33)
V11=(1234,5634,97)
V12=(9348,12,45)
globals()['T0']=[locals()['V'+'01'],V01,V02]#这个是可行的!!!
print(T0)
initialize_my_list()
这是为什么呢?
老铁, 你好像忘记了
local()
函数的作用locals()
函数会以字典类型返回当前位置的全部局部变量, 而每一个函数内部又可以看做一个局部作用域你可以设一个中间变量
就像这样就搞定了
至于第二段代码,
local()
返回的确实是作用域initialize_my_list()
中的局部变量, 所以是可行的