¿Función de Python como argumento de función?

¿Puede una función de Python ser un argumento de otra función?

Decir:

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

Así que esto es básicamente dos preguntas:

  1. ¿Está permitido en absoluto?
  2. Y si es así, ¿cómo uso la función dentro de la otra función? ¿Necesitaría usar exec (), eval () o algo así? Nunca necesité meterme con ellos.

Por cierto, extraArgs es una lista / tupla de los argumentos de otrofunc.

¿Puede una función de Python ser un argumento de otra función?

Sí.

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

Para ser más específicos … con varios argumentos …

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

Aquí hay otra forma de usar *args (y también opcionalmente), **kwargs :

 def a(x, y): print x, y def b(other, function, *args, **kwargs): function(*args, **kwargs) print other b('world', a, 'hello', 'dude') 

Salida

 hello dude world 

Tenga en cuenta que la function , *args , **kwargs deben estar en ese orden y deben ser los últimos argumentos de la función que llama a la función.

Las funciones en Python son objetos de primera clase. Pero tu definición de función está un poco apagada .

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

Claro, es por eso que Python implementa los siguientes métodos en los que el primer parámetro es una función:

  • map (function, iterable, …) – Aplicar la función a cada elemento de iterable y devolver una lista de los resultados.
  • filtro (función, iterable): construya una lista a partir de los elementos de iterable para los que la función devuelve verdadero.
  • reduce (function, iterable [, initializer]) – Aplica la función de dos argumentos de forma acumulativa a los elementos de iterable, de izquierda a derecha, para reducir el iterable a un solo valor.
  • lambdas
  1. Sí, está permitido.
  2. Utilice la función como lo haría con cualquier otro: anotherfunc(*extraArgs)
  1. Sí. Al incluir la llamada a la función en sus argumentos de entrada, puede llamar a dos (o más) funciones a la vez.

Por ejemplo:

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

Cuando llamas a myfunc, haces esto:

 myfunc(anotherfunc(inputarg1, inputarg2)) 

Esto imprimirá el valor de retorno de anotherfunc.

¡Espero que esto ayude!

Función dentro de la función: podemos usar la función como parámetro también ..

En otras palabras, podemos decir que una salida de una función es también una referencia para un objeto, vea a continuación cómo la salida de una función interna se refiere a la función externa como se muestra a continuación.

 def out_func(a): def in_func(b): print(a + b + b + 3) return in_func obj = out_func(1) print(obj(5)) 

El resultado será 14.

Espero que esto ayude.

 def x(a): print(a) return a def y(a): return a y(x(1)) 
 def x(a): print(a) return a def y(func_to_run, a): return func_to_run(a) y(x, 1) 

Eso creo que sería una muestra más adecuada. Ahora lo que me pregunto es si hay una manera de codificar la función para usar dentro del argumento de envío a otra función. Creo que hay en C ++, pero en Python no estoy seguro.

 def rotatedimention(l,m=[]): p=input("please enter a number to rotate the dimention:") for i in l: if i==l[int(p)]: break else: m.append(i) for j in m: l.remove(j) return l+m rotatedimention([121,21,41412,3412124,223424,2324114])