86

関数の外で、関数で定義された一連のローカル変数を使用したい。だから私はx=locals()戻り値を渡しています。

そのディクショナリで定義されたすべての変数を関数の外側の名前空間にロードするにはどうすればよいですx['variable']variable

4

7 に答える 7

104

Bunch別の方法を検討してください。

class Bunch(object):
  def __init__(self, adict):
    self.__dict__.update(adict)

したがって、辞書があり、 clumsier の代わりにd構文を使用してその値にアクセス (読み取り) したい場合は、次のようにします。x.food['foo']

x = Bunch(d)

これは関数の内側と外側の両方で機能しdますglobals()。Zen of Python の最後の行を思い出してください...:

>>> import this
The Zen of Python, by Tim Peters
   ...
Namespaces are one honking great idea -- let's do more of those!
于 2010-04-08T03:40:50.110 に答える
18

これは、自分が何をしているのかを認識している限り、あるローカル空間の変数を別のローカル空間にインポートするのに完全に有効なケースです。私は、そのようなコードが有用な方法で使用されているのを何度も見てきました。共通のグローバル スペースを汚染しないように注意する必要があります。

次のことができます。

adict = { 'x' : 'I am x', 'y' : ' I am y' }
locals().update(adict)
blah(x)
blah(y)
于 2010-10-25T11:24:40.450 に答える
6

変数をローカル名前空間にインポートすることは有効な問題であり、テンプレート フレームワークでよく使用されます。

関数からすべてのローカル変数を返します。

return locals()

次に、次のようにインポートします。

r = fce()
for key in r.keys():
   exec(key + " = r['" + key + "']")
于 2011-02-05T10:20:25.583 に答える
-2

常にこのオプションがあります。これが最善の方法であるかどうかはわかりませんが、確かに機能します。type(x) = dict と仮定

for key, val in x.items():  # unpack the keys from the dictionary to individual variables
    exec (key + '=val')
于 2016-09-16T20:35:15.140 に答える