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)
使用列表.
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)
但那是非常糟糕的形式,甚至可能无法保证工作.
绝对应该使用使用“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 的更多信息请参见此处。
看起来您想改用列表:
group=[]
for i in range(3):
group[i]=self.getGroup(selected, header+i)
Run Code Online (Sandbox Code Playgroud)