1

私にはたくさんの関数があり、配列がある場合は、配列[echo, "Bob is Good"]全体のパラメーターを使用して持っているエコー関数を実行します。したがってarr[0]、配列全体のパラメーターを使用してその関数を実行します。現在、次のような if ステートメントしかありません。

...
elif arr[0] == 'echo':
    echo(arr)
elif arr[0] == 'var':
    var(arr)

また、できれば、今のところ cmd のプレフィックスを付けて機能を設定しています。例えば、echo 関数は echocmd という名前になるので、それを実装する方法があればそれも素晴らしいでしょう!

4

3 に答える 3

5

明らかな方法。

funcdict = {
  'echo': echocmd,
  'var': varcmd,
   ...
}

 ...

funcdict.get(arr[0], invalidcmd)(arr)
于 2012-06-01T01:47:33.570 に答える
0

関数をリストに直接保存できます (これらは配列ではありません。Python では、これは別のことを意味します)。

def echocmd(foo, bar, baz):
    print foo, bar, baz # for testing

my_data = [echocmd, 'spam', 'and', 'eggs']
my_data[0](*my_data[1:])
于 2012-06-01T01:53:27.710 に答える
0

ふたつのやり方:

  • 代表的な値、つまり実行したい関数に対応する文字列または整数を渡します。ディクショナリを使用して、その値を実際の関数にインデックス付けします。

  • 実際の関数への参照を渡し、参照を使用して呼び出します。

2 つ目はより一般的です。好きな関数を作成して渡すことができます。1つ目は、インタープリターを「サンドボックス化」して、許可される機能を制限し、外部に保存しやすくすることができます。

于 2012-06-01T01:53:34.413 に答える