web-dev-qa-db-ja.com

Python関数の引数としての関数?

Python関数を別の関数の引数にすることはできますか?

いう:

def myfunc(anotherfunc, extraArgs):
    # run anotherfunc and also pass the values from extraArgs to it
    pass

したがって、これは基本的に2つの質問です。

  1. まったく許可されていますか?
  2. もしそうなら、他の関数内でどのように関数を使用しますか? exec()、eval()などを使用する必要がありますか?それらを台無しにする必要はありません。

ところで、extraArgsはanotherfuncの引数のリスト/タプルです。

101
a7664

Python関数を別の関数の引数にすることはできますか?

はい。

def myfunc(anotherfunc, extraArgs):
    anotherfunc(*extraArgs)

より具体的にするには...さまざまな引数で...

>>> def x(a,b):
...     print "param 1 %s param 2 %s"%(a,b)
...
>>> def y(z,t):
...     z(*t)
...
>>> y(x,("hello","manuel"))
param 1 hello param 2 manuel
>>>
121

*args(およびオプションで)、**kwargsを使用する別の方法を次に示します。

def a(x, y):
  print x, y

def b(other, function, *args, **kwargs):
  function(*args, **kwargs)
  print other

b('world', a, 'hello', 'dude')

出力

hello dude
world

function*args**kwargsはこの順序でなければならず、関数を呼び出す関数の最後の引数でなければならないことに注意してください。

32
sabujp

Pythonの関数はファーストクラスのオブジェクトです。しかし、関数定義 少しオフ です。

def myfunc(anotherfunc, extraArgs, extraKwArgs):
  return anotherfunc(*extraArgs, **extraKwArgs)

確かに、それがpythonが最初のパラメーターが関数である以下のメソッドを実装する理由です:

  • map(function、iterable、...)-iterableのすべてのアイテムに関数を適用し、結果のリストを返します。
  • filter(function、iterable)-functionがtrueを返すiterableの要素からリストを作成します。
  • reduce(function、iterable [、initializer])-2つの引数の関数をiterableの項目に左から右に累積的に適用し、iterableを単一の値に減らします。
  • ラムダ
4
  1. はい。入力引数に関数呼び出しを含めることにより、2つ(またはそれ以上)の関数を一度に呼び出すことができます。

例えば:

def anotherfunc(inputarg1, inputarg2):
    pass
def myfunc(func = anotherfunc):
    print func

Myfuncを呼び出すと、次のようになります。

myfunc(anotherfunc(inputarg1, inputarg2))

これにより、anotherfuncの戻り値が出力されます。

お役に立てれば!

2
Arial
  1. はい、許可されています。
  2. この関数は、他の場合と同じように使用します:anotherfunc(*extraArgs)
2
sepp2k

関数内の関数:関数をパラメーターとして使用することもできます。

つまり、関数の出力はオブジェクトの参照でもあると言えます。以下のように、内部関数の出力が外部関数をどのように参照しているかを参照してください。

def out_func(a):

  def in_func(b):
       print(a + b + b + 3)
  return in_func

obj = out_func(1)
print(obj(5))

結果は... 14

お役に立てれば。

1
Temizzi
def x(a):
    print(a)
    return a

def y(func_to_run, a):
    return func_to_run(a)

y(x, 1)

より適切なサンプルになると思います。さて、私が疑問に思うのは、別の関数への引数サブミット内で使用する関数をコーディングする方法があるかどうかです。 C++にはあると思いますが、Pythonにはありません。

1
Boris Epstein
def x(a):
    print(a)
    return a

def y(a):
    return a

y(x(1))