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实现统计代码行数的方法
May 22 Python
python选择排序算法实例总结
Jul 01 Python
Python编写电话薄实现增删改查功能
May 07 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Python函数装饰器实现方法详解
Dec 22 Python
OpenCV 边缘检测
Jul 10 Python
Python for循环搭配else常见问题解决
Feb 11 Python
python将logging模块封装成单独模块并实现动态切换Level方式
May 12 Python
python中format函数如何使用
Jun 22 Python
Python识别处理照片中的条形码
Nov 16 Python
Python中使用ipython的详细教程
Jun 22 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
自己做矿石收音机
2021/03/02 无线电
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
收集的10个免费的jQuery相册
2011/02/26 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
Node.js文件操作详解
2014/08/16 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
详解vue项目优化之按需加载组件-使用webpack require.ensure
2017/06/13 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
AngularJS中的作用域实例分析
2018/05/16 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
Python hashlib模块用法实例分析
2018/06/12 Python
keras中的卷积层&池化层的用法
2020/05/22 Python
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
一套PHP的笔试题
2013/05/31 面试题
期末总结的个人自我评价
2013/11/02 职场文书
中国央视网签名寄语
2014/01/18 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL