文字列を変数に変更できる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 に答える