python 动态创建变量 获取变量名
参考链接:https://www.cnblogs.com/technologylife/p/9211324.html
参考链接(未)(使用inspect 获取变量名):https://blog.csdn.net/s740556472/article/details/80928849
更容易理解的(未):https://segmentfault.com/q/1010000000405232
问题:
为什么要那样获取变量名呢?明明都已经把变量名给敲出来了?
需求和要求:
动态产生的变量名应该是有规律的
动态创建
使用exec动态赋值
exec是python3里的内置函数,支持python代码的动态运行
这种方式就相当于是执行了语句“var1=1”
if __name__=="__main__":
for i in range(5):#注意随意指定的5,可看为个数
exec('var{}={}'.format(i,i))
# print (n0)
print(var1,var2,var3) #输出:
1,2,3
利用命名空间动态赋值
在Python的命名空间中,将变量名与值存储在字典中,
可以通过locals()
,globals()
函数分别获取局部命名空间和全局命名空间。
#命名空间动态赋值
if __name__=="__main__":
names=locals()#关键点在这
for i in range(5):#注意随意指定的5,可看为个数
names['n'+str(i)]=i
# print (n0)
for i in range(5):
print(names['n'+str(i)])这样其实也不算新奇吧?
在类中使用动态变量
python的类对象的属性储存在的__dict__
中。__dict__
是一个词典,键为属性名,值对应属性的值。
In [1]: class Test_class(object):
...: def __init__(self):
...: names = self.__dict__#其实和通过命名空间差不多
...: for i in range(5):
...: names['n' + str(i)] = i
...: In [2]: t = Test_class() In [3]: print(t.n0, t.n1, t.n2, t.n3, t.n4)
0 1 2 3 4
调用
事实上,对于重复性的变量,我们一般不会这样调用变量,如:var0, var1, var2, var3 ,var4....varN
,(即自己把变量名写出来)
利用exec函数
同样地,可以使用exec
调用变量
In [3]: for i in range(5):
...: exec('print(var{}, end=" ")'.format(i))
...:
0 1 2 3 4
利用命名空间
因为命令空间的locals()
与globals()
均会返回一个字典,利用字典的get
方法获取变量的值
In [4]: names = locals() In [5]: for i in range(5):
...: print(names.get('var' + str(i)), end=' ')
#或者
print(names['var'+str(i)])
0 1 2 3 4
python 动态创建变量 获取变量名的更多相关文章
- Python 动态生成多个变量
引用自:https://blog.csdn.net/u013061183/article/details/78015673 用Python循环创建多个变量, 如创建 a1= .a2= .a3= ...
- Python 动态创建函数【转】
知乎上也有相似的问题 偶然碰到一个问题,初想是通过动态创建Python函数的方式来解决,于是调研了动态创建Python函数的方法. 定义lambda函数 在Python中定义lambda函数的写法很简 ...
- C#中根据变量获取变量名字符串
/// <summary> /// 获取当前变量的变量名 字符串 /// 调用:GetVarName(p=>test.str1); 返回 " ...
- python动态创建类的声明
动态创建类的声明 使用内置函数type,原型:class type(name, bases, dict)name是类的名字,相当于__class__bases是类的基类,元组,可以有多个基类,但是基类 ...
- 原生js动态创建、获取、删除属性的几种方式
1.创建属性 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...
- OC动态创建的问题变量数组.有数组,在阵列13要素,第一个数据包阵列,每3元素为一组,分成若干组,这些数据包的统一管理。最后,一个数组.(要动态地创建一个数组).两种方法
<span style="font-size:24px;">//////第一种方法 // NSMutableArray *arr = [NSMutable ...
- [Python] 动态函数调用(通过函数名)
2018-04-09 update 利用python中的内置函数 eval() ,函数说明: def eval(*args, **kwargs): # real signature unknown & ...
- python 动态指定header获取网页源代码的函数
import random import requests def get_htmla(url): aui=0 while aui==0: try: header={'User-Agent':'Moz ...
- python如何获取变量的变量名
假设现在存在一个值为1变量名为a的变量,如何通过一个函数获取该变量的变量名a? 上面这个需求来源于某群友的一个要求,希望能有一个这样的函数来方便打印. 这个需求很扯淡啊,为什么不用格式化输出?它回复到 ...
随机推荐
- Linux编译安装相关命令
1. configuer configure 是一个shell脚本,用来检测安装平台是否符合要求,并通过配置参数生成makefile文件 2. make (make all 的简写) 编译命令, ...
- URL 路由系统 + views 函数
一.URL URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段 ...
- Centos 7 修改网卡名称、静态IP
修改内核选项 # vim /etc/sysconfig/grub GRUB_TIMEOUT= GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc ...
- 如何用python编写一个计时器的程序
python计时器的程序的代码和注释 import time as t #引入time模块 class MyTimer(): def __init__(self): #构造函数 ...
- nyoj 1278G: Prototypes analyze 与 二叉排序树(BST)模板
参考博客:https://blog.csdn.net/stpeace/article/details/9067029 参考博客:https://blog.csdn.net/baidu_35643793 ...
- Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n ...
- 201871010134-周英杰《面向对象程序设计(java)》第八周学习总结
201871010134-周英杰<面向对象程序设计(java)>八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个 ...
- java修饰符的总结
引言:Java的修饰符根据修饰的对象不同,分为类修饰符.方法修饰符.变量修饰符,其中每种修饰符又分为访问控制修饰符和非访问控制修饰符.访问控制存在的原因:a.让客户端程序员无法触及他们不应该触及的部分 ...
- spring讲解
今日先简单介绍一下Spring bean 的 5 种效果域,然后详细介绍 singleton 和 prototype 这两种最常用的效果域. JavaSpring Bean的五种效果域 效果域的种类 ...
- Linux权限及归属管理 磁盘管理 文件系统 LVM管理
第五六七章 alias 查看系统别名 67 chmod 设置文件或目录的权限 -R表示以递归的方式设置目录及目录下的所有子目录及文件的权限 u:属主 g:属组 o:其他人 a:所有人 +:添加 ...