python 动态生成变量名以及动态获取变量的变量名方法


Posted in Python onJanuary 20, 2019

前言

需求:

必须现在需要动态创建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列表:

关键代码:

# 第一步 准备locals函数
prepare_list = locals()
""" 
第二步 循环16次,从0-15赋值给locals函数对应的变量prepare_list 
  prepare_list是一个字典,所以将我们需要的列表名称作为key值传入
"""
for i in range(16):
 arriage_list['list_' + str(i)] = []

测试代码:

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()

实验截图:

python 动态生成变量名以及动态获取变量的变量名方法

实际证明,已经动态的每次往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]

测试代码:

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)

实验截图:

python 动态生成变量名以及动态获取变量的变量名方法

以上这篇python 动态生成变量名以及动态获取变量的变量名方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python网络编程学习笔记(一)
Jun 09 Python
浅谈Python的文件类型
May 30 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
python实现图片处理和特征提取详解
Nov 13 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
python查看模块安装位置的方法
Oct 16 Python
python用match()函数爬数据方法详解
Jul 23 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
python访问hdfs的操作
Jun 06 Python
python实现自动清理重复文件
Aug 24 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 #Python
对python中词典的values值的修改或新增KEY详解
Jan 20 #Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 #Python
Python字典循环添加一键多值的用法实例
Jan 20 #Python
在PyCharm中批量查找及替换的方法
Jan 20 #Python
Python 移动光标位置的方法
Jan 20 #Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 #Python
You might like
php mssql 时间格式问题
2009/01/13 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
php解析url的三个示例
2014/01/20 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
PHP写的资源下载防盗链类分享
2014/05/12 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
php对象工厂类完整示例
2018/08/09 PHP
javascript删除option选项的多种方法总结
2013/11/22 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
JavaScript字符串对象
2017/01/14 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
利用Blob进行文件上传的完整步骤
2018/08/02 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python使用cookie库操保存cookie详解
2014/03/03 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
教师旷工检讨书
2014/01/18 职场文书
函授自我鉴定范文
2014/02/06 职场文书
采购助理岗位职责
2014/02/16 职场文书
廉洁使者实施方案
2014/03/29 职场文书
体育教师求职信
2014/06/30 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
岳庙导游词
2015/02/04 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
国家助学金受助感言
2015/08/01 职场文书
中学生运动会广播稿
2015/08/19 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
Android学习之BottomSheetDialog组件的使用
2022/06/21 Java/Android