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中bisect的用法
Sep 23 Python
Python中的引用和拷贝浅析
Nov 22 Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 Python
python插入排序算法实例分析
Jul 03 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 Python
Django实现表单验证
Sep 08 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 Python
对django中foreignkey的简单使用详解
Jul 28 Python
python 字符串的驻留机制及优缺点
Jun 19 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删除非空目录的函数代码小结
2013/02/28 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
2016/01/28 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
axios学习教程全攻略
2017/03/26 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
3分钟学会一个Python小技巧
2018/11/23 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
C#实现启动一个进程
2016/10/01 面试题
linux面试题参考答案(6)
2016/06/23 面试题
顺丰快递Java软件工程师面试题
2015/07/31 面试题
酒店服务实习自我鉴定
2013/09/22 职场文书
门卫岗位职责
2013/11/15 职场文书
办护照工作证明范本
2014/01/14 职场文书
洗发露广告词
2014/03/14 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
校长一岗双责责任书
2015/05/09 职场文书