Pregunta sobre python – Asignar una función a una variable

42

Digamos que tengo una función

<code>def x():
    print(20)
</code>

Ahora quiero asignar la función a una variable llamaday, de modo que si utilizo ely llama a la funciónx otra vez. si simplemente hago la tareay = x(), vuelveNone.

Yo creo quelambda   debería funcionar, pls. Revisa mi respuesta a continuación. Pengju Zhao
También edité como lo que quieres hacer aquí esasignar una función a una variablenoasignar una variable a una función. Gareth Latty
He editado tu pregunta para reducirla a lainformación relevante solamente.. Su entusiasmo es excelente, pero en el futuro, céntrese en explicar su pregunta real. Li-aung Yip

Tu respuesta

5   la respuesta
1

La sintaxis

<code>def x():
    print(20)
</code>

es básicamente lo mismo quex = 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 sintaxis

<code>def y(t):
   return t**2
</code>

es básicamente lo mismo quey= 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ás configurandox ser la funciónlambda: print(20). Asi quex ahora se refiere a esa función.x() no es la función, es lallamada 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:

<code>def power_function(power):
      return  lambda x : x**power
power_function(3)(2)
</code>

Esto devuelve 8.power_function Es una función que devuelve una función como salida. Cuando se llama3, devuelve una función que cubica la entrada, entonces cuandoese La función se llama en la entrada2, vuelve 8. Podrías hacercube = power_function(3), y ahoracube(2) Volvería 8.

-1

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

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

llamar a la funcióny(1) luego regresa2.

77

Simplemente no llamas a la función.

<code>>>>def x():
>>>    print(20)
>>>y = x
>>>y()
20
</code>

Los paréntesis le dicen a python que estás llamando a la función, así que cuando los pones allí, llama a la función y asignay el valordevuelto porx (que en este caso esNone).

Oh, gracias, esto es todo lo que quería saber. ¡Me estaba volviendo loco sin saber por qué estaba apareciendo! Gracias seeker
@seeker No estoy seguro de lo que puedo decir que no haya respondido ya.() Es la señal que está llamando la función. La función en sí esx - x() significa "toma x y llámalo sin argumentos". Hacery = x y luego mas tardey() llamarlo Gareth Latty
¿Puedes hacer esto con instancias de clase? jimh
@seeker Porque tu función está siendo llamada. Para obtener el resultado dex(), x debe ser ejecutado En este caso, se ejecuta, imprimiendo.20 y regresandoNone. Entonces ese resultado (None) se asigna ay. Las funciones en Python (como en la mayoría de los idiomas) pueden tener efectos secundarios. Para llamar a la función para obtener su valor de retorno (oNone si no tiene un valor de retorno explícito), la función se ejecuta y se producen efectos secundarios. Gareth Latty
6

cuando tocasy=x() en realidad estás asignando y al resultado de llamar al objeto de funciónx y la función tiene un valor de retorno deNone. Las llamadas de función en python se realizan usando(). Asignarx to y para que puedas llamary como lo haríasx le asignas la función objeto x a y gustay=x y llamar a la función usandoy()

12

Cuando asignas una función a una variable,no hacer use el () pero simplemente el nombre de la función.

En tu caso dadodef x(): ..., y variablesilly_var Harías algo como esto:

<code>silly_var = x
</code>

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

<code>x()
</code>

o

<code>silly_var()
</code>

Preguntas relacionadas