0

文字列を変数に変更できるPythonの他のメソッドはありますか?たとえば、button1、button2、button3などの名前の変数があります。ループでそれらを操作したいと思います。evalを使用したくない場合は、他に適切なものはありますか?

4

3 に答える 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 に答える