Asignar una función a una variable

Digamos que tengo una función

def x(): print(20) 

Ahora quiero asignar la función a una variable llamada y , de modo que si uso la y , vuelva a llamar a la función x . Si simplemente hago la asignación y = x() , devuelve None .

Related of "Asignar una función a una variable"

Simplemente no llamas a la función.

 >>>def x(): >>> print(20) >>>y = x >>>y() 20 

Los corchetes le dicen a python que está llamando a la función, por lo que cuando los coloca allí, llama a la función y le asigna a y el valor devuelto por x (que en este caso es None ).

Cuando asigna una función a una variable , no usa el () sino simplemente el nombre de la función.

En su caso dado def x(): ... , y la variable silly_var usted haría algo como esto:

 silly_var = x 

y luego puede llamar a la función ya sea con

 x() 

o

 silly_var() 

cuando realiza y=x() , en realidad está asignando y al resultado de llamar al objeto de función x y la función tiene un valor de retorno de None . Las llamadas a funciones en python se realizan usando () . Para asignar x to y así puede llamar a y como lo haría x , asignar el objeto de función x a y como y=x y llamar a la función usando y()

La syntax

 def x(): print(20) 

es básicamente lo mismo que x = lambda: print(20) (hay algunas diferencias bajo el capó, pero para la mayoría de los propósitos prácticos, los resultados son los mismos).

La syntax

 def y(t): return t**2 

es básicamente lo mismo que y= lambda t: t**2 . Cuando define una función, está creando una variable que tiene la función como su valor. En el primer ejemplo, está configurando x para que sea la función lambda: print(20) . Entonces x ahora se refiere a esa función. x() no es la función, es la llamada de la función. En Python, las funciones son simplemente un tipo de variable, y generalmente se pueden usar como cualquier otra variable. Por ejemplo:

 def power_function(power): return lambda x : x**power power_function(3)(2) 

Esto devuelve 8. power_function es una función que devuelve una función como salida. Cuando se llama a 3 , devuelve una función que cubica la entrada, de modo que cuando se llama a esa función en la entrada 2 , devuelve 8. Podría hacer cube = power_function(3) , y ahora el cube(2) devolvería 8.

Lambda debería ser útil para este caso. Por ejemplo,

  1. crear función y = x + 1 y=lambda x:x+1

  2. llamar a la función y(1) luego devolver 2 .