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发送以整个文件夹的内容为附件的邮件的教程
May 06 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
Python合并字典键值并去除重复元素的实例
Dec 18 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
Jan 17 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
python openssl模块安装及用法
Dec 06 Python
深入理解python协程
Jun 15 Python
Python3.10的一些新特性原理分析
Sep 15 Python
python工具dtreeviz决策树可视化和模型可解释性
Mar 03 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全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
php验证码实现代码(3种)
2015/09/07 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
python aiohttp的使用详解
2019/06/20 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
先进典型发言材料
2014/12/30 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
Redis可视化客户端小结
2021/06/10 Redis
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
Oracle中日期的使用方法实例
2022/07/07 Oracle