使用Python for循环更改变量名称

use*_*633 23 python variables for-loop

我只是想知道是否有人知道如何根据for循环更改变量名称,如下所示:

for i in range(3)
     group+i=self.getGroup(selected, header+i)
Run Code Online (Sandbox Code Playgroud)

这样变量的名称就会变化以容纳数据.谢谢!

〜山姆

Eli*_*ght 44

你可能想要一个字典而不是单独的变量.例如

d = {}
for i in range(3):
    d["group" + str(i)] = self.getGroup(selected, header+i)
Run Code Online (Sandbox Code Playgroud)

如果您坚持实际修改局部变量,则可以使用以下locals函数:

for i in range(3):
    locals()["group"+str(i)] = self.getGroup(selected, header+i)
Run Code Online (Sandbox Code Playgroud)

另一方面,如果你真正想要的是修改你所在的类的实例变量,那么你可以使用该setattr函数

for i in group(3):
    setattr(self, "group"+str(i), self.getGroup(selected, header+i)
Run Code Online (Sandbox Code Playgroud)

当然,我假设所有这些例子都不仅仅是一个列表:

groups = [self.getGroup(i,header+i) for i in range(3)]
Run Code Online (Sandbox Code Playgroud)


Dav*_*d Z 8

使用列表.

groups = [0]*3
for i in xrange(3):
    groups[i] = self.getGroup(selected, header + i)
Run Code Online (Sandbox Code Playgroud)

或更多"Pythonically":

groups = [self.getGroup(selected, header + i) for i in xrange(3)]
Run Code Online (Sandbox Code Playgroud)

对于它的价值,您可以尝试以"错误"的方式创建变量,即通过修改保存其值的字典:

l = locals()
for i in xrange(3):
    l['group' + str(i)] = self.getGroup(selected, header + i)
Run Code Online (Sandbox Code Playgroud)

但那是非常糟糕的形式,甚至可能无法保证工作.


rad*_*tek 6

绝对应该使用使用“group”+ str(i) 键的字典,如已接受的解决方案中所述,但我想使用 exec 共享一个解决方案。它是一种将字符串解析为命令并动态执行它们的方法。它将允许根据您的要求创建这些标量变量名称,而不是使用字典。这可能有助于了解不该做什么,并且仅仅因为你可以做并不意味着你应该做。仅当使用标量变量是硬性要求时,它才是一个好的解决方案:

l = locals()
for i in xrange(3):
    exec("group" + str(i) + "= self.getGroup(selected, header + i)")
Run Code Online (Sandbox Code Playgroud)

另一个可以使用 Django 模型示例来实现此功能的示例。exec 替代解决方案被注释掉,使用dict属性处理这种情况的更好方法更有意义:

Class A(models.Model):

    ....

    def __getitem__(self, item):  # a.__getitem__('id')
        #exec("attrb = self." + item)
        #return attrb
        return self.__dict__[item]
Run Code Online (Sandbox Code Playgroud)

首先从字典扩展以获得 setattr 和 getattr 函数可能更有意义。

涉及解析的情况,例如动态生成和执行 python 命令,exec 就是您想要的:) 有关 exec 的更多信息请参见此处


Gre*_*ill 3

看起来您想改用列表:

group=[]
for i in range(3):
     group[i]=self.getGroup(selected, header+i)
Run Code Online (Sandbox Code Playgroud)

  • 您指的是“字典”还是“列表”?什么是数组? (3认同)