Python如何批量生成和调用变量


Posted in Python onNovember 21, 2020

这几天写代码中遇到的一个常见问题,在Python中如何批量的生成一些变量,如生成变量X1, X2, X3,并在后续的方法中调用,完成赋值、取值等操作。这个问题也算是常见的吧,之前遇到过,也不了了之了。而这次遇到了同样的问题,虽然是创建三个变量数量较少,但从代码维护和易读性的角度考虑,需要使用一些恰当的手段,来避免重复写三次同样代码带来的弊端。一百次,一万次?总不能复制这么多次吧。(为何不复制?详情参考软件工程中的软件维护)。

因此有必要养成良好的习惯,而不是复制三次同样的代码。

使用Locals()方法

在普通函数内的确可以使用,但在类中不行。这个问题也困扰了我很久,所以,建议在编写类时需要批量创建和调用变量时,不建议使用。

for i in range(3):
  locals() ['x' + str(i)] = i

for j in range(3):
  a = locals() ['x' + str(j)]
  print(a)
print(x0)

执行结果如下:

0
1
2
0

此时在普通函数中一切正常,但在编写的类中无法运行:

class test(object):
  def __init__(self):
    for i in range(3):
      locals() ['self.x' + str(i)] = i
  def run(self):
    for i in range(3):
      a = locals() ['self.x' + str(i)]
      print(a)

a = test()
a.run()

报错信息如下,并没有找到这个变量。而我在编写GUI时,类是常用的工具,所以在类中调用这个方法时,导致了错误。

KeyError: 'self.x0'

所以我找到了一种更加优雅的方式,使用字典。

使用字典

字典键值对的形式,尤其是键可设置为字符串,对此类问题可以提供良好的解决方案。

class test(object):
  def __init__(self):
    self.d = {}
    for i in range(3):
      self.d['x' + str(i)] = i
  def run(self):
    for i in range(3):
      a = self.d['x' + str(i)]
      print(a)

asd = test()
asd.run()

此时便可以愉快的在类中批量的生成与调用变量。而在普通函数中也是可以的:

d = {}

for i in range(3):
  d['x' + str(i)] = i
  
print(d.keys())
print(d['x0'])

for i in range(3):
  print(d['x' + str(i)])

输出结果如下:

dict_keys(['x0', 'x1', 'x2'])
0
0
1
2

以上就是Python如何批量生成和调用变量的详细内容,更多关于Python批量生成和调用变量的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现一个简单的MySQL类
Jan 07 Python
python提取页面内url列表的方法
May 25 Python
python中import学习备忘笔记
Jan 24 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 Python
详解Django解决ajax跨域访问问题
Aug 24 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
Python如何输出警告信息
Jul 30 Python
Python 数据可视化之Bokeh详解
Nov 02 Python
python处理json数据文件
Apr 11 Python
在终端启动Python时报错的解决方案
Nov 20 #Python
python 批量下载bilibili视频的gui程序
Nov 20 #Python
Python ellipsis 的用法详解
Nov 20 #Python
python 动态渲染 mysql 配置文件的示例
Nov 20 #Python
Python paramiko使用方法代码汇总
Nov 20 #Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 #Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 #Python
You might like
多php服务器实现多session并发运行
2006/10/09 PHP
浅谈php冒泡排序
2014/12/30 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
Python守护进程(daemon)代码实例
2015/03/06 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
python openCV自制绘画板
2020/10/27 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
课前三分钟演讲稿
2014/04/24 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
关于MySQL中的 like操作符详情
2021/11/17 MySQL