0

だから私は関数を呼び出すために使用する名前の束を持つ辞書を持っています。正常に動作しますが、設定ファイルに入れることを好みます。ただし、そうすると、設定ファイルから、その名前の関数がないというエラーが表示されます(その時点でそれらを呼び出していませんが)。回避策はありますか?

def callfunct(id, time):
    #stuff here
def callotherfunct(id, time):
    #stuff here
dict = {"blah blah": callfunct, "blah blah blah": callfunct, "otherblah": callotherfunct}
dict[str(nameid)](id, time)

これが理にかなっていることを願っています。他のアイデアも受け入れますが、基本的に、これらの定義と、特定の関数を呼び出す必要がある nameid によって渡される一意の名前の約 50 の反復があるため、新しい名前をすばやく追加できるように、私のやり方でそれを行います。 . 辞書をシームレスに設定ファイルに取り込むことができれば、明らかにさらに高速になります。

4

2 に答える 2

1

試してみると

def f_one(id, time):
    pass

def f_two(id, time):
    pass

d = {"blah blah":"f_one", "blah blah blah":"f_one", "otherblah","f_two"
locals()[d[str(nameid)]](id, time)

(辞書の初期化を、呼び出したい関数の文字列名で構成ファイルをロードするだけに置き換えます)、それは機能しますか?

そうでない場合は、もう少し情報が必要です。構成ファイルはどのように見え、どのようにロードしていますか?

構成ファイルの部分が機能しない理由は、機能しないはずの構成ファイルから関数を直接参照しようとしているからだと思います。これは、構成ファイルに保存されているものを使用して、locals()辞書で検索しています (関数内にいる場合は、globals()代わりに使用する必要があります) 。

于 2012-11-02T00:32:18.467 に答える
0

アクセスしようとした場合にのみ、ルックアップ関数で辞書を初期化できます。

d = {}
d.setdefault('func1', globals()['func1'])()
于 2012-11-02T00:33:46.293 に答える