it-swarm.com.de

Python-Funktion als Funktionsargument?

Kann eine Python-Funktion ein Argument einer anderen Funktion sein?

Sagen:

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

Das sind also im Grunde zwei Fragen:

  1. Ist es überhaupt erlaubt?
  2. Und wenn ja, wie verwende ich die Funktion in der anderen Funktion? Müsste ich exec (), eval () oder ähnliches verwenden? Ich brauchte nie mit ihnen zu spielen.

Übrigens, extraArgs ist eine Liste/ein Tuple der Argumente anderer Funktionen.

86
a7664

Kann eine Python-Funktion ein Argument sein einer anderen Funktion?

Ja.

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

Um genauer zu sein ... mit verschiedenen Argumenten ...

>>> 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
>>>
103

Hier ist eine andere Möglichkeit, *args (und optional), **kwargs zu verwenden:

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

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

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

Ausgabe

hello dude
world

Beachten Sie, dass function, *args, **kwargs in dieser Reihenfolge sein muss und die letzten Argumente der aufrufenden Funktion sein müssen.

28
sabujp

Funktionen in Python sind erstklassige Objekte. Aber Ihre Funktionsdefinition ist ein bisschen ab .

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

Sicher, deshalb implementiert Python die folgenden Methoden, bei denen der erste Parameter eine Funktion ist:

  • map (function, iterable, ...) - Wendet eine Funktion auf jedes Element von iterable an und gibt eine Liste der Ergebnisse zurück. 
  • filter (function, iterable) - Konstruieren Sie aus den Elementen von iterable eine Liste, für die die Funktion true zurückgibt.
  • verkleinern (function, iterable [ initializer]) - Wendet die Funktion von zwei Argumente kumulativ auf die Elemente von iterable an, von links nach
  • lambdas
4
  1. Ja. Indem Sie den Funktionsaufruf in Ihre Eingabeargumente aufnehmen, können Sie zwei (oder mehr) Funktionen gleichzeitig aufrufen. 

Zum Beispiel:

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

Wenn Sie myfunc anrufen, führen Sie Folgendes aus:

myfunc(anotherfunc(inputarg1, inputarg2))

Dadurch wird der Rückgabewert einer anderen Funktion gedruckt. 

Hoffe das hilft! 

2
Arial
  1. Ja, das ist erlaubt.
  2. Sie verwenden die Funktion wie jedes andere auch: anotherfunc(*extraArgs)
2
sepp2k

Funktion innerhalb der Funktion: Wir können die Funktion auch als Parameter verwenden.

Mit anderen Worten, wir können sagen, dass eine Ausgabe einer Funktion auch eine Referenz für ein Objekt ist. Siehe unten, wie die Ausgabe der inneren Funktion auf die äußere Funktion verweist, wie unten beschrieben. 

def out_func(a):

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

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

das Ergebnis ist .. 14 

Hoffe das hilft. 

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

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

y(x, 1)

Ich denke, das wäre ein richtigeres Beispiel. Nun frage ich mich, ob es eine Möglichkeit gibt, die Funktion zu codieren, die in der Argumentübergabe an eine andere Funktion verwendet wird. Ich glaube, dass es in C++ gibt, aber in Python bin ich nicht sicher.

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

def y(a):
    return a

y(x(1))