0

別の関数を複数回呼び出すように設計された関数を作成しようとしています:

def iterator(iterations, function, *args):  
#called as:
iterator(5, my_function, arg1, arg2, arg3)  

ここでの引数の数は可変であることに注意してください: 1 かもしれないし、2 かもしれないし、10 かもしれません。呼び出されている関数に基づいてそれらを埋めてください。

def iterator(iterations, function, *args):
  for i in range(iteration):
    temp = function(args)
  return temp

ここでの問題は次のとおりです: TypeError: my_function() は正確に 4 つの引数を取ります (1 つ指定)

これは、(arg1, arg2, arg3, arg4) が単一の引数として扱われているためです。

どうすればこれを回避できますか?

4

2 に答える 2

4

シーケンスを適用するときに同じ構文を使用すると、次のようになります。args

temp = function(*args)

ここでの構文は、関数パラメーターの構文*argsと密接に関連しています。*args任意の数の引数をキャプチャする代わりに*args呼び出しで使用すると、シーケンスが個別の引数に展開されます。

**kwargsキーワード引数を取得して適用するための構文もあることに興味があるかもしれません。

def iterator(iterations, function, *args, **kwargs):
    for i in range(iteration):
        temp = function(*args, **kwargs)
    return temp
于 2013-11-11T23:16:52.357 に答える
2

これを試して、引数リストを解凍します(別名、スプラッティング):

function(*args)

ドキュメントの例から、これが必要なものであることがわかります。

range(3, 6)    # ok
range([3, 6])  # won't work
range(*[3, 6]) # it works!
于 2013-11-11T23:17:09.847 に答える