0

Python中还有其他方法可以将字符串更改为变量吗?例如,我有一些变量名为 button1、button2、button3 等,我想在循环中对它们进行操作。如果我不想使用 eval,还有什么合适的吗?

4

3 回答 3

1

There'sglobalslocalswhich 返回您当前命名空间的字典映射。

例如:

a = 1
print globals()['a']  #1

globals如果变量是在模块级别定义的,locals则应使用该变量,应将其用于其他所有内容。在您的情况下,我认为这locals()['button1']可以解决问题。


话虽如此,首先将按钮放在字典中可能是一个更好的主意。

于 2012-11-24T05:06:47.893 回答
0

这不是你问的,而是有什么问题:

  for btn in (button1, button2, button3):
      do_something(btn)
于 2012-11-24T05:12:56.350 回答
-1

globals()and函数返回可用于直接操作全局和局部变量的locals()字典:

# sets the global variable foo (in the scope of the module) to 1
# equivalent to
#   foo = 1
# outside a functions
globals()['foo'] = 1

# gets the local variable bar (in the scope of the current function)
# equivalent to
#   print bar
# inside a function
print locals()['bar']

当您在locals()函数外部使用时,它相当于使用globals().

如果要操作对象的属性,可以使用getattr(obj, name)andsetattr(obj, name, value)代替:

# equivalent to
#   print foo.x
print getattr(foo, 'x')

# equivalent to
#   foo.x = 45
setattr(foo, 'x', 45)

编辑:正如DSM指出的那样, usinglocals()不能可靠地用于在函数中设置变量值。无论如何,将所有按钮都包含在单独的字典中也会更聪明。

于 2012-11-24T05:17:13.227 回答