Python 动态变量名定义与调用方法
2026/8/29 18:58:04 网站建设 项目流程

动态变量名赋值

使用情形下会需要向着动态的方向去生成变量, 就像去生成var1这样的变量到var10这样的变量一样。

使用exec动态赋值

exec在中是内置函数,它支持代码的动态执行。

示例:

In[1]:foriinrange(5): ...:exec('var{}={}'.format(i,i)) ...: In[2]:print(var0,var1,var2,var3,var4) 01234

利用命名空间动态赋值

在的命名空间中,将变量名与值存储在字典中,

可以通过(),()函数分别获取局部命名空间和全局命名空间。

示例

>>>names=locals() >>>foriinrange(5): ...names['n'+str(i)]=i ... >>>print(n0,n1,n2,n3,n4) 01234 >>>

在类中使用动态变量

类对象所拥有的属性, 被存储于其中。其是这样一种存在, 它是一本词典, 词典里的键是属性的名称, 而对应键的值, 便是属性实际对应的值。

示例

>>>print(n0,n1,n2,n3,n4) 01234 >>>classTest_class(object): ...def__init__(self): ...names=self.__dict__ ...foriinrange(5): ...names['n'+str(i)]=i ... >>>t=Test_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]:names=locals() In[5]:foriinrange(5): ...:print(names.get('var'+str(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"",line1

=temp

:

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

用这种方式创建的变量, 不会出现第一种方式里那种语法错误以及变量作用域的错误, 很值得去推荐!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询