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}      # 返回一个名字/值对的字典
1
2
3
4
5
6
下面用自己的例子来实现下,目标:动态创建名字为list_0到list_15的16个list列表:
关键代码:
# 第一步 准备locals函数
prepare_list = locals()
""" 
第二步 循环16次,从0-15赋值给locals函数对应的变量prepare_list 
      prepare_list是一个字典,所以将我们需要的列表名称作为key值传入
"""
for i in range(16):
    arriage_list['list_' + str(i)] = []
1
2
3
4
5
6
7
8
测试代码:
def test_list_pre():
    prepare_list = locals()
    for i in range(16):
        prepare_list['list_' + str(i)] = []
        prepare_list['list_' + str(i)].append(('我是第' + str(i)) + '个list')
    print(prepare_list['list_0'])
    print(prepare_list['list_1'])
    print(prepare_list['list_2'])
    print(prepare_list['list_3'])
if __name__ == '__main__':
    test_list_pre()
1
2
3
4
5
6
7
8
9
10
11
12
实验截图:
实际证明,已经动态的每次往list插入了值。
python 动态获取变量的变量名
需求目标:如果有了上面的动态命名list,那么当动态获取变量的变量名,就需要如下的操作: 
利用python原生的inspect库来实现: 
核心代码:
import inspect
def get_variable_name(variable):
    callers_local_vars = inspect.currentframe().f_back.f_locals.items()
    return [var_name for var_name, var_val in callers_local_vars if var_val is variable]
1
2
3
4
5
测试代码:
def get_variable_name(variable):
    callers_local_vars = inspect.currentframe().f_back.f_locals.items()
    return [var_name for var_name, var_val in callers_local_vars if var_val is variable]
if __name__ == '__main__':
    prepare_list = locals()
    for i in range(16):
        prepare_list['list_' + str(i)] = []
        prepare_list['list_' + str(i)].append(('我是第' + str(i)) + '个list')
    a = get_variable_name(prepare_list['list_0']).pop()
    b = get_variable_name(prepare_list['list_1']).pop()
    print(a)
    print(b)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
实验截图:
以上。。。。完了
--------------------- 
作者:sy_y 
来源:CSDN 
原文:https://blog.csdn.net/s740556472/article/details/80928849 
版权声明:本文为博主原创文章,转载请附上博文链接!
python 动态生成变量名以及动态获取变量的变量名的更多相关文章
- silverlight 从数据库获取到数据,动态生成XMLWEN文件,并获取文件进行操作
		// Silverlight中的独立存储是其内部的可信任的可访问文件空间,在这里你可以使用Silverlight随意的创建.读取.写入.删除目录和文件,它有一些类似于Cookie,但是它可以在客户端保 ... 
- 怎么动态生成js变量
		动态生成全局变量: //简单的用字符串作为变量名 window['hello'] = "hello, world"; alert(hello); //批量定义 for(var ... 
- jquery给动态生成的元素绑定事件,on函数
		首先先解释一下什么是动态生成的元素:动态生成的元素即我们用jquery的内部插入函数append()所生成的html代码.相对的也有静态生成的元素:即直接编写在页面的html代码. 下面通过例子来讲解 ... 
- mysql 获取设置环境变量
		mysql 获取环境变量 show global variables; 获取指定环境变量 show global variables like '%timeout'; 设置环境变量 set globa ... 
- 【转载】 Python动态生成变量
		用Python循环创建多个变量, 如创建 a1= .a2= .a3= .a4= .a5= 或 self.a1= .self.a2= . self.a3= 一. 可以通 ... 
- Python 动态生成多个变量
		引用自:https://blog.csdn.net/u013061183/article/details/78015673 用Python循环创建多个变量, 如创建 a1= .a2= .a3= ... 
- Python动态生成变量
		Python 也可以像javascript那样动态生成变量.我们看javascript的动态生成变量. var obj = {}; for (var i =0, len = 10; i < le ... 
- python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))
		昨日内容回顾 1. 三个类 ChangeList,封装列表页面需要的所有数据. StarkConfig,生成URL和视图对应关系 + 默认配置 AdminSite,用于保存 数据库类 和 处理该类的对 ... 
- Python调用ansible API系列(四)动态生成hosts文件
		方法一:通过最原始的操作文件的方式 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 通过操作文件形式动态生成ansib ... 
随机推荐
- web前端学习(三)css学习笔记部分(7)-- 文字和字体相关样式、盒子相关样式、背景与边框相关样式
			12. 文字和字体相关样式 12.1 CSS3 给文字添加阴影 使用 text-shadow 属性给页面上的文字添加阴影效果,text-shadow 属性是在CSS2中定义的,在 CSS2.1 中 ... 
- web前端学习常用网址记录
			jetbrains下载各种软件和试用 www.jetbrains.com www.jetbrains.com/idea php服务器下载 php文档查询 php.net webAPI网站(各种教程文档 ... 
- locationManager 回调方法不调用问题?
			当locationManager都设置好了后开始定位服务后回调方法didUpdateToLocation不调用 [_locationManager setDelegate:self]; [_locat ... 
- 【等价的穿越】Burnside引理&Pólya计数法
			Problem 起源: SGU 294 He's Circle 遗憾的是,被吃了. Poj有道类似的: Mission 一个长度为n(1≤n≤24)的环由0,1,2组成,求有多少本质不同的环. 实际上 ... 
- IO流-文件操作
			一.字节流读/写 文件 1.字节流 方式读取文件 
- Python学习笔记(四)Python程序的控制结构
			在学习了 Python 的基本数据类型后,我们就要开始接触Python程序的控制结构,了解 Python 是如何使用控制结构来更改程序的执行顺序以满足多样的功能需求.如果有的小伙伴在之前学过C语言,j ... 
- phpstorm配置Xdebug进行调试PHP教程_php技巧_脚本之家
			运行环境: PHPSTORM版本 : 8.0.1 PHP版本 : 5.6.2 xdebug版本:php_xdebug-2.2.5-5.6-vc11-x86_64.dll ps : php版本和xdeb ... 
- 一文纵览EMAS 到底内含多少阿里核心技术能力
			申请阿里云EMAS,体验一站式移动研发平台,更多精彩尽在开发者会场 EMAS的整体定位是阿里巴巴移动技术对外输出的主窗口,沉淀了阿里巴巴近10年在移动互联网技术架构上的积累以及在一系列垂直场景中所实践 ... 
- ns2 错误(_O17 cmd line 1)  解决
			重新安装ns2,发现了如下错误: (_o17 cmd line 1) invoked from within "_o17 cmd addr" invoked from within ... 
- Spring CommonsMultipartResolver上传文件小结
			自从业至今,文件上传与IO流之类的调用,一直是理解比较模糊的地方,大多就这网上搜到的资料抄抄改改草草了事,内部原理一直不甚了解,今日我们通过Spring的CommonsMultipartResolve ... 
