def f1(n): #accepts one argument
pass
def f2(): #accepts no arguments
pass
FUNCTION_LIST = [(f1,(2)), #each list entry is a tuple containing a function object and a tuple of arguments
(f1,(6)),
(f2,())]
for f, arg in FUNCTION_LIST:
f(arg)
ループの 3 回目では、引数を受け入れない関数に引数の空のタプルを渡そうとします。エラーが発生しますTypeError: f2() takes no arguments (1 given)
。最初の 2 つの関数呼び出しは正しく機能します。タプル自体ではなく、タプルの内容が渡されます。
問題のあるリスト エントリの引数の空のタプルを削除しても、問題は解決しません。
FUNCTION_LIST[2] = (f2,)
for f,arg in FUNCTION_LIST:
f(arg)
になりますValueError: need more than 1 value to unpack
。
また、リスト要素ではなくインデックスを反復処理しようとしました。
for n in range(len(FUNCTION_LIST)):
FUNCTION_LIST[n][0](FUNCTION_LIST[n][1])
これはTypeError
、最初のケースとIndexError: tuple index out of range
、リストの 3 番目のエントリが の場合に同じ結果をもたらし(f2,)
ます。
最後に、アスタリスク表記も機能しません。今回は への呼び出しでエラーになりますf1
:
for f,args in FUNCTION_LIST:
f(*args)
を与えTypeError: f1() argument after * must be a sequence, not int
ます。
試してみたいものがなくなってきました。私はまだ最初のものはうまくいくはずだと思います。誰かが私を正しい方向に向けることができますか?