python 动态生成变量名

需求: 
      必须现在需要动态创建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}      # 返回一个名字/值对的字典
>>>

locals()函数参考地址

下面用自己的例子来实现下,目标:动态创建名字为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、追加数据

参考链接

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值