【转载】 Python动态生成变量
用Python循环创建多个变量, 如创建 a1= 、a2= 、a3= 、a4= 、a5= 或 self.a1= 、self.a2= 、 self.a3=
一. 可以通过python的内置函数locals 来完成
locals是python的内置函数,他可以以字典的方式去访问局部和全局变量。
python里面用名字空间记录着变量,就像javascript的window一样,他记录着各种全局变量。
每个模块,每个函数都有自己的名字空间,记录着变量,常量,类的命名和值。
就像JS一样,当python在使用变量时,会按照下面的步骤去搜索:
1、函数或类的局部变量。
2、全局变量。
3、内置变量。
以上三个步骤,其中一下步骤找到对应的变量,就不会再往下找。如果在这三个步骤都找不到,就会抛出异常。
Python 也可以像javascript那样动态生成变量。我们看javascript的动态生成变量:
1 var obj = {}; 2 for (var i =0, len = 10; i < len; i++){ 3 obj['a' + i] = i; 4 } 5 6 console.log(i); //{'a0':0, 'a1':1....,'a9':9}
Python中的locals 方法
1 createVar = locals() 2 listTemp = range(1,10) 3 for i,s in enumerate(listTemp): 4 createVar['a'+i] = s 5 print a1,a2,a3 6 #......
1 def foo(args): 2 x=1 3 print locals() 4 5 foo(123) 6 7 #将会得到 {'arg':123,'x':1}
1 for i in range(3): 2 locals()['a'+str(i)]=i 3 print 'a'+str(i)
打印结果:变量名: a0 a1 a2 对应值 a0=0 a1=1 a2=2
二. 对于class,推荐使用setattr()方法
setattr给对象添加属性或者方法
setattr( | object, name, value) |
This is the counterpart of getattr(). The arguments
are an object, a string and an arbitrary value. The string may name an existing
attribute or a new attribute. The function assigns the value to the attribute,
provided the object allows it. For example, setattr(x,
is equivalent to
'foobar', 123)x.foobar = 123
.
1 class test(object) : 2 def __init__(self): 3 dic={'a':'aa','b':'bb'} 4 for i in dic.keys() : 5 setattr(self,i,dic[i]) #第一个参数是对象,这里的self其实就是test.第二个参数是变量名,第三个是变量值 6 print(self.a) 7 print(self.b) 8 t=test()
打印结果: aa , bb
动态打印self变量:
1 exec("self.a"+str(i)+".move("+str(x)+","+str(y)+")") 2 exec("self.a"+str(i)+".show()")
提示: 动态创建字典会带来额外开销,如果可以的话,请尽量指定键值对。
相关文章
- python机器学习数据建模与分析——决策树详解及可视化案例
- Python 语言基础之 变量和常量
- Window下:自带python编辑器的wxpython项目发布打包exe
- 深入理解Python中的ThreadLocal变量(下)
- Python datetime模块详解
- python-day6 多个变量接受函数返回的结果&两个变量交换值
- python使用变量
- python文件读写操作与linux shell变量命令交互执行
- 手工测试也能分分钟学会的UI自动化测试(Python版)
- 为你的Python程序加密
- Python编程:Django中的Request对象常用属性
- python list元素为dict时的排序
- python线程获取变量各自独立的方法
- Python 学习笔记 (变量与数据类型)
- 【Python基础】不同变量类型之间的计算 || IPython中练习 || 字符串使用 + 进行拼接 || 变量的输入 || 变量的格式化输出 || Python中的标识符 || if语句
- 【Python】赋值运算符(链式赋值,参数赋值,解包赋值,交换两个变量的值)
- 【Python】单行注释 || 多行注释 || 中文编码声明注释 || 以上博客知识汇总 || 变量&数据类型&类型转换&注释
- Python基础语法(二)
- 【日常记录】python多版本螺旋飞天配置方法以及终极排错
- Python基础 -- 变量进阶
- 第8.34节 《Python类中常用的特殊变量和方法》总结
- 利用Python特殊变量__dict__快速实现__repr__的一种方法
- 关于Python链式赋值的赋值顺序问题
- 第7.13节 案例详解:Python类变量
- 第5.3节 详说Python风格的函数分配参数
- 第2章 Python编程基础知识 第2.1节 简单的Python数据类型、变量赋值及输入输出
- 第十三届蓝桥杯大赛软件组省赛 Python大学A组 个人题解
- Python pandas.DataFrame.combine_first函数方法的使用
- 点云配准(二)— python open3d ICP方法
- 【深度学习 内力篇】Chap.1 单变量线性回归问题+梯度下降算法+Python建模实战
- 【Python】面向Sqli-Labs Less15的布尔盲注二分法脚本
- 【Python】字符串 ⑦ ( input 字符串输入 | input 函数自带提示参数 | input 函数接收的变量类型 )
- 【Python】字符串 ⑤ ( Python 字符串快速格式化 | 不考虑变量类型 | 不考虑精度控制 )
- 五、python学习之多任务-线程