文字列を変数に変更できるPythonの他のメソッドはありますか?たとえば、button1、button2、button3などの名前の変数があります。ループでそれらを操作したいと思います。evalを使用したくない場合は、他に適切なものはありますか?
3 に答える
1
globals
現在の名前空間の辞書マッピングをlocals
返すものがあります。
例えば:
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)
andを使用できます。setattr(obj, name, value)
# equivalent to
# print foo.x
print getattr(foo, 'x')
# equivalent to
# foo.x = 45
setattr(foo, 'x', 45)
EDIT : DSMが指摘したようlocals()
に、関数内で変数値を設定するために using を確実に使用することはできません。とにかく、すべてのボタンを別の辞書に含める方がはるかに賢明です。
于 2012-11-24T05:17:13.227 に答える