Python中是否有其他方法可以将字符串更改为变量? 例如,我有一些名为button1,button2,button3等的变量。我想在循环中对它们进行操作。如果我不想使用eval,还有其他合适的东西吗?
答案 0 :(得分:1)
有globals
和locals
,它们返回当前命名空间的字典映射。
e.g:
a = 1
print globals()['a'] #1
如果变量是在模块级别定义的,则应使用 globals
,locals
应该用于其他所有内容。在你的情况下,我认为locals()['button1']
可以解决问题。
话虽如此,将按钮放在字典中可能是个更好的主意。
答案 1 :(得分:0)
这不是你问的问题,但是有什么问题:
for btn in (button1, button2, button3):
do_something(btn)
答案 2 :(得分:-1)
globals()
和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)
和setattr(obj, name, value)
:
# equivalent to
# print foo.x
print getattr(foo, 'x')
# equivalent to
# foo.x = 45
setattr(foo, 'x', 45)
编辑:正如DSM指出的那样,使用locals()
无法可靠地用于在函数中设置变量值。不管怎样,只需将所有按钮包含在单独的字典中也会更加明智。