需求:
必须现在需要动态创建16个list,每个list的名字不一样,但是是有规律可循,比如第一个list的名字叫:
arriage_list_0=[],第二个叫arriage_list_1=[]……..依次类推,但是我又不想手动的去写16个这样的名字,太累了,而且增加了代码的冗余性,灵活性也不强,所以有没有一种方法是能动态创建list名称的呢?答案是有的!而与之对应,既然要对上面的列表动态操作,肯定是少不了动态去解析list名称。所以下面开始介绍方法:
python 动态生成变量名
locals函数
代码之前,先介绍一个函数:
locals() 函数会以字典类型返回当前位置的全部局部变量。
>>>def runoob(arg): # 两个局部变量:arg、z
... z = 1
... print (locals())
...
>>> runoob(4)
{'z': 1, 'arg': 4} # 返回一个名字/值对的字典
>>>
下面用自己的例子来实现下,目标:动态创建名字为list_0到list_15的16个list列表:
#coding=utf-8
# 第一步 准备locals函数
arriage_list={}
"""
第二步 循环16次,从0-15赋值给locals函数对应的变量prepare_list
prepare_list是一个字典,所以将我们需要的列表名称作为key值传入
"""
for i in range(16):
arriage_list['list_' + str(i)] = []
print(type(arriage_list)) #打印arriage_list类型
print(arriage_list) #打印arriage_list值
打印arriage_list结果
<class 'dict'>
{'list_0': [], 'list_1': [], 'list_2': [], 'list_3': [], 'list_4': [], 'list_5': [],
'list_6': [], 'list_7': [], 'list_8': [], 'list_9': [], 'list_10': [], 'list_11': [],
'list_12': [], 'list_13': [], 'list_14': [], 'list_15': []}
从结果可以看出arriage_list返回的字典类型,(键+值)的结构 'list_0': [], 且值为空,这正好为后面向列表里添加数据创造了条件
# 测试代码:
prepare_list={} #定义空字典
def test_list_pre():
prepare_list = locals() #返回prepare_list中当前位置每个字典里的全部局部变量(也就是键)
for i in range(16):
prepare_list['list_' + str(i)] = [] #创建对象list_0, list_1,list_2 .....
prepare_list['list_' + str(i)].append(('我是第' + str(i)) + '个list') #为这些键添加数据
print(type(prepare_list['list_0'])) #打印类型
print(prepare_list['list_0']) #打印值
print(prepare_list['list_1'])
print(prepare_list['list_2'])
print(prepare_list['list_3'])
运行结果
<class 'list'>
['我是第0个list']
['我是第1个list']
['我是第2个list']
['我是第3个list']
从结果可以看出 prepare_list['list_0'] 是列表(list)类型,其他的也是列表(list)类型,说明实现了创建动态变量,并在每个列表添加数据(append函数)
总结:
想要创建动态变量实现创建不同列表
1、定义空字典
2、利用locals()函数返回当前位置的全部局部变量
3、创建:每一个 变量名(键)的对象
4、追加数据