¿Cuál es la diferencia para python entre lambda y la función regular?

Tengo curiosidad por la diferencia entre la función lambda y una función regular (definida con def ) en el nivel de python. (Sé cuál es la diferencia para los progtwigdores y cuándo usar cada uno).

 >>> def a(): return 1 >>> b = lambda: 1 >>> a  >>> b <function  at 0x0000000004031588> 

Como podemos ver, python sabe que b es una función lambda y a es una función regular. ¿porqué es eso? ¿Cuál es la diferencia entre ellos para python ?

Son del mismo tipo por lo que son tratados de la misma manera:

 >>> type(a)  >>> type(b)  

Python también sabe que b se definió como una función lambda y establece que como nombre de función:

 >>> a.func_name 'a' >>> b.func_name '' 

En otras palabras, influye en el nombre que recibirá la función pero, en lo que respecta a Python, ambas son funciones, lo que significa que pueden utilizarse principalmente de la misma manera. Vea el comentario de mgilson a continuación para una diferencia importante entre las funciones y las funciones lambda con respecto al decapado.

La única diferencia es que (a) el cuerpo de una lambda puede constar de una sola expresión, cuyo resultado se obtiene de la función creada y (b) una expresión lambda es una expresión que se evalúa como un objeto de función, mientras que una def instrucción def no tiene valor, crea un objeto de función y lo enlaza a un nombre.

En todos los demás aspectos materiales, resultan en objetos idénticos: se aplican las mismas reglas de scope y captura. (Las diferencias inmateriales son que las funciones func_name por lambda tienen un func_name de función predeterminado de "" . Esto puede afectar la operación en casos esotéricos, por ejemplo, bashs de funciones de encurtido).

lambda crea una función anónima. Esta idea ha sido tomada de lenguajes de progtwigción funcionales. De esta manera, puede crear y pasar la función a otras funciones como map y filter . (mira aquí )
También puede pasar funciones normales a estas funciones, pero dado que la mayoría son simples y no se han utilizado en ningún otro lugar, es un inconveniente para todo el proceso de definición de una nueva función.

Como ejemplo, mira esto:

 >>> a = [1, 2, 3, 4] >>> print map( lambda x : x*2 + 1, a ) [3, 5, 7, 9, 11] 

Lambda es una función en línea donde podemos hacer cualquier funcionalidad sin un nombre de función. Es útil cuando lo usamos como un argumento para una función de orden superior. Ej .: Una función que toma otras funciones como argumentos.

Ejemplo de definición de función:

 >>> def func(a, b): return a * b >>> func(2,3) 6 >>> type(func)  >>> func  

Ejemplo de expresión Lambda:

 >>> multiply = lambda a, b: a * b >>> multiply(2, 3) 6 >>> type(multiply)  >>> multiply  at 0x034B6ED0> 

Ambos devuelven el mismo valor de salida. Sólo el objeto devuelto es diferente. Nombre de “func” para Function y para Lambda.