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开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
Linux环境下MySQL-python安装过程分享
Feb 02 Python
用Python给文本创立向量空间模型的教程
Apr 23 Python
python求解水仙花数的方法
May 11 Python
详解Python中映射类型的内建函数和工厂函数
Aug 19 Python
python版本的读写锁操作方法
Apr 25 Python
Python 函数基础知识汇总
Mar 09 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
Python把图片转化为pdf代码实例
Jul 28 Python
Python实现机器学习算法的分类
Jun 03 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网站在线人数统计
2008/04/09 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php中socket通信机制实例详解
2015/01/03 PHP
PHP类的封装与继承详解
2015/09/29 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
Python类的多重继承问题深入分析
2014/11/09 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
python 剪切移动文件的实现代码
2018/08/02 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
存储过程和函数的区别
2013/05/28 面试题
航空大学应届生求职信
2013/11/10 职场文书
中药学自荐信
2014/06/15 职场文书
女生节标语
2014/06/26 职场文书
公民授权委托书范本
2014/09/17 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
暑期工社会实践报告
2015/07/13 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
高中美术教学反思
2016/02/17 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
详解如何用Python实现感知器算法
2021/06/18 Python