1

Python プログラムの書き直しで発生した問題。

以前のグローバル変数を辞書に移動したので、それらの変数を使用した関数を書き直さなければなりません。

例えば、

#old one
a, b = 1, 2    
def func(c):
    print a+b+c

#new one
d = dict(a=1,b=2)
def func(c,d):
    a = d['a']
    b = d['b']
    print a+b+c

辞書 dが大きいので、このようなものを探しています

d = dict(a=1,b=2)
def func(c,d):
    locals().update(d)
    print a+b+c

試してみ ましたが__dict__.update(d)__dict__直接アクセスできません。

それともfor key,value in d.items(): setattr(obj,key,value) 可能ですか?はいの場合、obj を関数自体に設定する方法は?

4

3 に答える 3

1

statementinの句をexec使用できます。このin句では、文字列を実行するときに Python が検索する名前空間を指定できます。ドキュメンテーション


例えば:

>>> d = dict(a=1, b=2)
>>> def func(c,d):
        exec 'print a+b+c' in d, locals()


>>> func(5,d)
8
于 2013-08-28T03:43:05.337 に答える
1

そのようにプログラムでローカル変数を作成することはできません。

代わりに、キーにアクセスしてディクショナリを直接使用してください。

于 2013-08-28T03:25:27.327 に答える
1

代わりにできることは、辞書をローカル変数として使用して式を評価することです。

def func(c,d):
    print eval('a+b+c',globals(),dict(d,c=c))

func(3,dict(a=1,b=2))
于 2013-08-28T03:31:30.500 に答える