1

EDIT 2 : 非常に多くの人々が悪い設計に対して泣いているため、このユースケースが明らかになる可能性があります。これらの質問と回答の読者は、使用する前によく考える必要があります

Python の名前で変数 (プロパティではない) を設定しようとしています:

foo = 'bar'
thefunctionimlookingfor('foo', 'baz')
print foot #should print baz

PS:変数に名前で(evalなしで)アクセスする関数はプラスになります!

編集: 辞書が存在することは知っていますが、この種の使用法はお勧めしません。非常に特定の目的 (環境に応じた構成ファイルの変更) に使用することを選択しました。これにより、コードが読みやすくなります。

4

6 に答える 6

5

可変名の変数が必要な場合は、辞書を使用します。

data = {}
foo = 'bar'
data[foo] = 'baz'
print data['bar']
于 2012-07-27T12:34:43.533 に答える
3

ローカルスコープで変数を動的に設定することは、を使用せずにPython 2.xで行うことはできexecません。また、Python3.xではまったくできません。によって返されるディクショナリを変更することでグローバルスコープを変更できglobals()ますが、実際には変更しないでください。代わりに、独自の辞書を使用してください。

于 2012-07-27T12:34:14.697 に答える
3

次のようなことができます:

def thefunctionimlookingfor(a, b):
    globals()[a] = b

使用法:

>>> foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'q' is not defined
>>> thefunctionimlookingfor('foo', 'bar')
>>> foo
'bar'

しかし、他の人が述べたように、これはひどい考えです。名前空間は便利な概念です。再設計を検討します。

于 2012-07-27T12:47:51.143 に答える
1

モジュールレベルsetattrでは、現在のモジュールで使用できます。これは、次の場所から取得できますsys.modules

setattr(sys.modules[__name__], 'name', 'value')
于 2012-07-27T13:19:31.473 に答える
0

このlocals()関数は、ローカル変数で満たされた辞書を返します。

locals()['foo'] = 'baz'
于 2012-07-27T12:35:56.160 に答える
0

このような機能をお探しですか?それらは、あなたがたまたまいるローカル名前空間を変更することを可能にします.

import sys

def get_var(name):
    return sys._getframe(1).f_locals[name]

def set_var(name, value):
    sys._getframe(1).f_locals[name] = value

def del_var(name):
    del sys._getframe(1).f_locals[name]
于 2012-07-27T15:26:59.737 に答える