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的Flask框架中@app.route的用法教程
Mar 31 Python
python实现稀疏矩阵示例代码
Jun 09 Python
python实现简单点对点(p2p)聊天
Sep 13 Python
python:print格式化输出到文件的实例
May 14 Python
Sanic框架请求与响应实例分析
Jul 16 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
Python接口测试文件上传实例解析
May 22 Python
解决pip install psycopg2出错问题
Jul 09 Python
Django中使用Celery的方法步骤
Dec 07 Python
pycharm 关闭search everywhere的解决操作
Jan 15 Python
python如何用matplotlib创建三维图表
Jan 26 Python
Flask response响应的具体使用
Jul 15 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
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
CCPry JS类库 代码
2009/10/30 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
python中字典dict常用操作方法实例总结
2015/04/04 Python
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
pymongo中group by的操作方法教程
2019/03/22 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
Python netmiko模块的使用
2020/02/14 Python
教师实习自我鉴定
2013/12/13 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书