Python で別の関数内の関数を呼び出そうとしていますが、正しい構文が見つかりません。私がやりたいことは次のようなものです:
def wrapper(func, args):
func(args)
def func1(x):
print(x)
def func2(x, y, z):
return x+y+z
wrapper(func1, [x])
wrapper(func2, [x, y, z])
この場合、最初の呼び出しは機能しますが、2 番目は機能しません。変更したいのは、呼び出された関数ではなく、ラッパー関数です。
ベストアンサー1
他の回答を少し詳しく説明します。
次の行に:
def wrapper(func, *args):
の横にある * は、args
「指定された残りのパラメータを取得して、 というリストに格納するargs
」ことを意味します。
次の行に:
func(*args)
ここの横の * は、args
「args というこのリストを取得し、それを残りのパラメータに「展開」する」ことを意味します。
したがって、次の操作を実行できます。
def wrapper1(func, *args): # with star
func(*args)
def wrapper2(func, args): # without star
func(*args)
def func2(x, y, z):
print x+y+z
wrapper1(func2, 1, 2, 3)
wrapper2(func2, [1, 2, 3])
ではwrapper2
、リスト は明示的に渡されますが、両方のラッパーにはargs
リスト が含まれます[1,2,3]
。