example - python lambda aws
¿Las funciones lambda de Python ayudan a reducir los tiempos de ejecución? (1)
No. Los objetos de función generados por lambda
comportan exactamente como los generados por def
. No se ejecutan más rápido. (Además, inline
en el C ++ moderno ya no es una directiva que le dice al compilador que inscriba una función, y tiene muy poco que ver con la alineación).
Si lo desea, puede echar un vistazo al desmontaje de bytecode para un lambda
y una def
equivalente:
import dis
dis.dis(lambda x: x + 2)
print()
def f(x): return x + 2
dis.dis(f)
Output :
3 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (2)
6 BINARY_ADD
7 RETURN_VALUE
6 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (2)
6 BINARY_ADD
7 RETURN_VALUE
Ninguna diferencia. También puedes cronometrarlos:
import timeit
def f(x): return x + 2
g = lambda x: x + 2
print(timeit.timeit(''f(3)'', globals=globals()))
print(timeit.timeit(''g(3)'', globals=globals()))
Output :
0.06977041810750961
0.07760106027126312
La lambda en realidad tomó más tiempo en esta carrera. (Parece haber cierta confusión en los comentarios acerca de si estamos sincronizando el trabajo lo suficiente como para ser significativo. timeit
envuelve la declaración cronometrada en un bucle de millones de iteraciones de forma predeterminada, así que sí, lo somos).
Antes de que preguntes, no, lambda
tampoco tiene ninguna desventaja de rendimiento sobre la def
. El ganador de la carrera anterior es básicamente suerte. lambda
embargo, lambda
y def
tienen una desventaja significativa al evitar el uso de una función de devolución de llamada por completo. Por ejemplo, map
-with- lambda
tiene una penalización de rendimiento significativa en relación con la lista de comprensión:
import timeit
print(timeit.timeit(''list(map(lambda x: x*x, range(10)))''))
print(timeit.timeit(''[x*x for x in range(10)]''))
Output :
1.5655903220176697
0.7803761437535286
Ya sea lambda
o def
, las funciones de Python son caras de llamar.
Se entiende que las funciones lambda de Python ayudan en la creación de funciones anónimas. Se pueden usar en otras funciones como map (), reduce (), filter () y key () en las funciones de clasificación. También se puede utilizar para demostrar y utilizar cierres léxicos.
Lo que me gustaría saber específicamente aquí es, ¿tienen las funciones lambda una ventaja específica sobre las funciones regulares en términos de sus tiempos de ejecución, considerando que todos los demás factores no han cambiado ?
Como soy nuevo en Python, he tratado de entenderlos comparándolos de manera análoga con las funciones en línea de C ++. Las funciones en línea, según entiendo de C ++, son útiles para ahorrar tiempo, ya que no requieren las "tareas de mantenimiento" necesarias relacionadas con el cambio de contexto que se produce durante las llamadas a funciones y los saltos.
¿Las funciones de Python Lambda proporcionan ventajas similares sobre las funciones regulares?
Algunas publicaciones relevantes que me parecieron útiles pero no necesariamente útiles para mi pregunta: ¿Por qué son útiles las lambdas de Python? ¿Por qué usar funciones lambda?