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程序抓取网页的HTML信息的一个小实例
May 02 Python
python的pdb调试命令的命令整理及实例
Jul 12 Python
python 执行shell命令并将结果保存的实例
May 11 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 Python
Python 内置变量和函数的查看及说明介绍
Dec 25 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
对python中list的五种查找方法说明
Jul 13 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
conda安装tensorflow和conda常用命令小结
Feb 20 Python
Python开发五子棋小游戏
Apr 28 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
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
php中$_POST与php://input的区别实例分析
2015/01/07 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
js确定对象类型方法
2012/03/30 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
python实现下载指定网址所有图片的方法
2015/08/08 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
简单实现Python爬取网络图片
2018/04/01 Python
python实现反转部分单向链表
2018/09/27 Python
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
linux面试相关问题
2012/08/11 面试题
建龙钢铁面试总结
2014/04/15 面试题
大学毕业感言
2014/01/10 职场文书
红旗方阵解说词
2014/02/12 职场文书
青年志愿者活动总结
2014/04/26 职场文书
担保书范文
2015/01/20 职场文书
秋菊打官司观后感
2015/06/03 职场文书
转变工作作风心得体会
2016/01/23 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS