首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子字符串变量名python

子字符串变量名python
EN

Stack Overflow用户
提问于 2012-02-09 19:02:41
回答 4查看 370关注 0票数 3

我有几个这样的变量:

代码语言:javascript
复制
self.lamp_1
self.lamp_2
self.lamp_3
self.lamp_4

现在我想使用每个this name is循环来自动调用它们,如下所示:

代码语言:javascript
复制
for i in range(1,5):
    self.canvas.itemconfig(self.lamp_/number_i_automaticly/, fill=self.color_blink)

我尝试使用eval()函数,但它不起作用。它会停止运行我的程序。

代码语言:javascript
复制
eval("self.canvas.itemconfig(self.lamp_"+str(i)+",fill=self.color_blink)")

如何使用键i以这种方式解密变量名?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-09 19:06:50

您可以使用getattr来执行以下操作:

代码语言:javascript
复制
for i in range(1,5):
    self.canvas.itemconfig(getattr(self, 'lamp_%s' % i),
                           fill=self.color_blink)

但是你真的不应该这样命名你的变量。将它们放在一个列表中,然后迭代:

代码语言:javascript
复制
self.lamps = [self.lamp_1, self.lamp_2, self.lamp_3, self.lamp_4]
for lamp in self.lamps:
    self.canvas.itemconfig(lamp, fill=self.color_blink)
票数 2
EN

Stack Overflow用户

发布于 2012-02-09 19:04:05

使用列表而不是索引变量名:

代码语言:javascript
复制
self.lamps = [lamp_1, lamp_2, lamp_3, lamp_4]

如果您坚持使用索引变量名(您不应该),则可以使用getattr()

代码语言:javascript
复制
for i in range(1, 5):
    self.canvas.itemconfig(getattr(self, "lamp_%i" % i), 
                           fill=self.color_blink)
票数 8
EN

Stack Overflow用户

发布于 2012-02-09 19:16:59

尽可能避免使用eval。在这种情况下,您可以使用getattr

代码语言:javascript
复制
for i in range(1, 5):
    value = getattr(self, 'lamp_%d' % i)

但我同意:你应该使用列表(或字典)来代替。

编辑:哦,使用setattr来设置它们:

代码语言:javascript
复制
setattr(self, 'lamp_%d' % i, value)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9209675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档