ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Python 动态变量名定义与调用方法

2026/8/29 18:58:19 拓冰建站 浏览量
Python 动态变量名定义与调用方法 动态变量名赋值使用情形下会需要向着动态的方向去生成变量, 就像去生成var1这样的变量到var10这样的变量一样。使用exec动态赋值exec在中是内置函数它支持代码的动态执行。示例In[1]:foriinrange(5): ...:exec(var{}{}.format(i,i)) ...: In[2]:print(var0,var1,var2,var3,var4) 01234利用命名空间动态赋值在的命名空间中将变量名与值存储在字典中可以通过()()函数分别获取局部命名空间和全局命名空间。示例nameslocals() foriinrange(5): ...names[nstr(i)]i ... print(n0,n1,n2,n3,n4) 01234 在类中使用动态变量类对象所拥有的属性, 被存储于其中。其是这样一种存在, 它是一本词典, 词典里的键是属性的名称, 而对应键的值, 便是属性实际对应的值。示例print(n0,n1,n2,n3,n4) 01234 classTest_class(object): ...def__init__(self): ...namesself.__dict__ ...foriinrange(5): ...names[nstr(i)]i ... tTest_class() print(t.n0,t.n1,t.n2,t.n3,t.n4) 01234调用动态变量实际上, 针对于具有重复性的变量而言, 我们通常情况下是不会采用这样的方式去调用变量的, 比如说, 像 var0、var1、var2、var3、var4……varN 这样的变量, 是能够借助下面所讲述的方法来进行动态调用变量的。先定义如下变量示例foriinrange(5): ...exec(var{}{}.format(i,i)) ... print(var0,var1,var2,var3,var4) 01234利用exec函数同样地可以使用exec调用变量In[3]:foriinrange(5): ...:exec(print(var{},end).format(i)) ...: 01234利用命名空间正是由于命令空间的以及都会去返回一个字典, 借助字典的get方法拿来获取变量的值。In[4]:nameslocals() In[5]:foriinrange(5): ...:print(names.get(varstr(i)),end) ...: 01234下面是其他网友的补充定义动态变量问题描述在进行数据处理期间, 针对那些通过分组而得到的数据, 所开展的操作大致都是相似的, 变量的命名均具备相同的结构, 举例来说, 针对每个月份的数据计算均值、方差等统计量, 变量的命名可以设定为“n月的均值”, “n月的方差”, 经过抽象提炼便是“n月的m统计量”。实现编程的时候, 上述变量的定义能实现, 对其引用也能实现, 二者一同实现, 减少了重复代码数量。实现的时候遇到了动态定义变量的问题这里总结一下利用exec动态定义变量我们可以如此动态定义变量forninrange(1,13): exec(month_{}{}.format(n,valueorexpression))正常来讲, 这种语句通常能够正确地对变量进行定义, 然而, 有的时候, 上述语句会出现差错, 举例来说, 当后方传入的内容为返回一个类变量的情况时, 就会产生语法方面的错误。File,line1:何种缘由尚不清楚, 经历一番查找之后, 我察觉到存在另外一种界定方式, 能够将上述难题予以处理。forninrange(1,13): exec(month_{}temp.format(n),{temp:expression})这种方法有两个问题1、通过利用进行替换的部分要处于变量名的最末尾之处, 比如{}, 这样才能够执行成功, 然而{}这一情况却是不可行的, 其中缘由有待查找...还请各位同学给予指点File,line1temp:2、变量由这种方法所定义, 仅于exec里具备效力, 于exec语句之外就不生效, 这大概是由于把exec当中繁杂的指令视作局部变量了, 能够借助以下语句来开展检验。forninrange(1,13): exec(month_{}temp\nprint(locals()globals()).format(n),{temp:expression})其中, 跟属于是的内在方法, 它们给出了依靠字典的途径来访问局部以及全局变量。若是返回True, 表明当下环境处在全局级别, 于exec里的语句能够在exec之外生效。要是返回False, 那就表明当期的环境处在局部级别, 所定义的变量被看成是局部变量, 因而没办法在exec之外进行调用, 能够往语句里传入()叫它于全局生效。forninrange(1,13): exec(month_{}temp.format(n),{temp:expression},globals())exec这种方式极易变得混乱不堪, 存在着另外一种能够动态定义变量的办法, 也就是刚才上面提及到的那种, 是()的方法以及()的方法。利用命名空间动态定义变量首先创建()的副本()对于上文提到的变量便可如此定义forninrange(1,13): varDict[month_str(n)]valueorexpression用这种方式创建的变量, 不会出现第一种方式里那种语法错误以及变量作用域的错误, 很值得去推荐