独自の関数の辞書を作成する Python スクリプトがあり、YARP を使用して関数名と引数を読み取って実行したいと思います (ただし、YARP の知識はこの質問には関係ありません)。
「inc」という文字列のリストを作成します。このリストには、プログラムに入力される値が入力されます。最初の項目は関数名で、リスト内のその他の文字列はすべて引数です。キーが関数名で、値が関数オブジェクトへの参照である "methods" という辞書を作成します (inspect モジュールを使用)。関数の戻り値を変数「result」に格納します。
以下のスニペットは、私が今まで使っていたものの単純化されたバージョンを示しています。これは問題なく動作しますが、複数の引数を持つ関数を処理することはできません。これを回避するために、関数にさらにパラメーターが必要な場合はリストを使用します。
if len(inc) == 1:
result = methods[inc[0]]() # call method with 0 arguments
elif len(inc) == 2:
result = methods[inc[0]](inc[1]) # call method passing a string
else:
args = []
result = methods(inc[0])(inc[1:]) # call method passing a list
理想的には、関数が任意の数の引数を持つことができるようにこれを変更したいのですが、これを行う方法がわかりません。私は Python を初めて使用し、ドキュメントやさまざまな Web サイトを見てきましたが、解決策が見つかりません。引数のタプルを作成するなどのことを試しましたが、タプル全体を 1 つのパラメーターとして渡すことになるため、それも機能しません。
パラメータのセットを表すある種のオブジェクトを作成し、それを関数に渡すなど、この問題に対するより良い解決策はありますか? どんな提案でも大歓迎です!