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写的一个定时重跑获取数据库数据
Dec 28 Python
python pandas生成时间列表
Jun 29 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
使用Python opencv实现视频与图片的相互转换
Jul 08 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
Python queue队列原理与应用案例分析
Sep 27 Python
wxPython:python首选的GUI库实例分享
Oct 05 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
python实现引用其他路径包里面的模块
Mar 09 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
利用Python优雅的登录校园网
Oct 21 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.ini中文版
2006/10/09 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
使用python实现rsa算法代码
2016/02/17 Python
Python线程指南详细介绍
2017/01/05 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
python简单贪吃蛇开发
2019/01/28 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
优秀护士获奖感言
2014/02/20 职场文书
公司授权委托书
2014/04/04 职场文书
护士求职信
2014/07/05 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
56句经典英文座右铭
2019/08/09 职场文书