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之wxPython应用实例
Sep 28 Python
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
python 多维切片之冒号和三个点的用法介绍
Apr 19 Python
flask中过滤器的使用详解
Aug 01 Python
详解django+django-celery+celery的整合实战
Mar 19 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
Jan 08 Python
Keras实现将两个模型连接到一起
May 23 Python
python GUI计算器的实现
Oct 09 Python
用python批量移动文件
Jan 14 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 06 Python
Pygame Time时间控制的具体使用详解
Nov 17 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 whois查询API制作方法
2011/06/23 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
layui表格实现代码
2017/05/20 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
Python中itertools模块用法详解
2014/09/25 Python
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
Django框架自定义session处理操作示例
2019/05/27 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
django model object序列化实例
2020/03/13 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
python requests库的使用
2021/01/06 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
英国网上花店:Bunches
2016/11/29 全球购物
Collection和Collections的区别
2016/05/02 面试题
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
生产厂厂长岗位职责
2013/12/25 职场文书
教育孩子心得体会
2014/01/01 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书