Python中还有其他方法可以将字符串更改为变量吗?例如,我有一些变量名为 button1、button2、button3 等,我想在循环中对它们进行操作。如果我不想使用 eval,还有什么合适的吗?
问问题
278 次
3 回答
1
There'sglobals
和locals
which 返回您当前命名空间的字典映射。
例如:
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 回答