137 votes

Fonction Python comme argument de fonction ?

Une fonction Python peut-elle être un argument d'une autre fonction ?

Dire:

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

Voici donc essentiellement deux questions :

  1. Est-ce autorisé du tout ?
  2. Et si c'est le cas, comment utiliser la fonction à l'intérieur de l'autre fonction ? Aurais-je besoin d'utiliser exec(), eval() ou quelque chose comme ça ? Jamais eu besoin de jouer avec eux.

BTW, extraArgs est une liste/tuple d'arguments d'autre fonction.

154voto

msalvadores Points 8768

Une fonction Python peut-elle être un argument d'une autre fonction ?

Oui.

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

Pour être plus précis... avec divers arguments...

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

34voto

user318673 Points 21

Voici une autre façon d'utiliser *args (et aussi éventuellement), **kwargs :

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

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

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

Production

 hello dude
world

Notez que function , *args , **kwargs doivent être dans cet ordre et doivent être les derniers arguments de la fonction appelant la fonction.

19voto

Les fonctions en Python sont des objets de première classe. Mais votre définition de fonction est un peu décalée .

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

3voto

Temizzi Points 354

Fonction à l'intérieur de la fonction : nous pouvons également utiliser la fonction comme paramètre.

En d'autres termes, nous pouvons dire qu'une sortie d'une fonction est également une référence pour un objet, voir ci-dessous comment la sortie de la fonction interne fait référence à la fonction extérieure comme ci-dessous.

 def out_func(a):

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

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

le résultat sera.. 14

J'espère que cela t'aides.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X