Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Funciones Python Lambda con EJEMPLOS

¿Qué es la función Lambda en Python?

Una función Lambda en Python la programación es una función anónima o una función que no tiene nombre. Es una función pequeña y restringida que no tiene más de una línea. Al igual que una función normal, una función de Lambda puede tener múltiples argumentos con una expresión.

En Python, las expresiones lambda (o formas lambda) se utilizan para construir funciones anónimas. Para ello, utilizará la lambda palabra clave (al igual que usa def para definir funciones normales). Cada función anónima que defina en Python tendrá 3 partes esenciales:

Una función lambda puede tener cualquier cantidad de parámetros, pero el cuerpo de la función solo puede contener uno expresión. Además, una lambda se escribe en una sola línea de código y también se puede invocar de inmediato. Verá todo esto en acción en los siguientes ejemplos.

En este tutorial de Lambda en Python, aprenderá:

Sintaxis y ejemplos

La sintaxis formal para escribir una función lambda es la siguiente:

lambda p1, p2: expression

Aquí, p1 y p2 son los parámetros que se pasan a la función lambda. Puede agregar tantos o pocos parámetros como necesite.

Sin embargo, tenga en cuenta que no usamos corchetes alrededor de los parámetros como lo hacemos con las funciones normales. La última parte (expresión) es cualquier expresión de Python válida que opere con los parámetros que proporcione a la función.

Ejemplo 1

Ahora que conoces las lambdas, intentémoslo con un ejemplo. Entonces, abre tu IDLE y escribe lo siguiente:

adder = lambda x, y: x + y
print (adder (1, 2))

Aquí está el resultado:

3

Explicación del código

Aquí, definimos una variable que contendrá el resultado devuelto por la función lambda.

1. La palabra clave lambda utilizada para definir una función anónima.

2. x e y son los parámetros que pasamos a la función lambda.

3. Este es el cuerpo de la función, que agrega los 2 parámetros que pasamos. Note que es una sola expresión. No puede escribir varias declaraciones en el cuerpo de una función lambda.

4. Llamamos a la función e imprimimos el valor devuelto.

Ejemplo 2

Ese fue un ejemplo básico para comprender los fundamentos y la sintaxis de lambda. Ahora intentemos imprimir una lambda y ver el resultado. Nuevamente, abra su IDLE y escriba lo siguiente:

#What a lambda returns
string='some kind of a useless lambda'
print(lambda string : print(string))


Ahora guarde su archivo y presione F5 para ejecutar el programa. Este es el resultado que debe obtener.

Salida:

<function <lambda> at 0x00000185C3BF81E0>

¿Que esta pasando aqui? Veamos el código para entender más.

Código Explicación

  1. Aquí, definimos una cadena que pasará como parámetro a la lambda.
  2. Declaramos una lambda que llama a una declaración de impresión e imprime el resultado.

Pero, ¿por qué el programa no imprime la cadena que pasamos? Esto se debe a que la propia lambda devuelve un objeto de función. En este ejemplo, la lambda no se llama por la función de impresión pero simplemente regresando el objeto de la función y la ubicación de la memoria donde se almacena. Eso es lo que se imprime en la consola.

Ejemplo 3

Sin embargo, si escribe un programa como este:

#What a lambda returns #2
x="some kind of a useless lambda"
(lambda x : print(x))(x)

Y ejecútelo presionando F5, verá un resultado como este.

Salida:

some kind of a useless lambda

Ahora, se llama a la lambda y la cadena que pasamos se imprime en la consola. Pero, ¿cuál es esa sintaxis extraña y por qué la definición de lambda está cubierta entre paréntesis? Entendamos eso ahora.

Código Explicación

  1. Esta es la misma cadena que definimos en el ejemplo anterior.
  2. En esta parte, estamos definiendo una lambda y llamándola inmediatamente al pasar la cadena como argumento. Esto es algo llamado IIFE, y obtendrá más información al respecto en las próximas secciones de este tutorial.

Ejemplo 4

Veamos un ejemplo final para entender cómo se ejecutan las funciones regulares y lambdas. Entonces, abra su IDLE y en un nuevo archivo, escriba lo siguiente:

#A REGULAR FUNCTION
def guru( funct, *args ):
funct( *args )
def printer_one( arg ):
return print (arg)
def printer_two( arg ):
print(arg)
#CALL A REGULAR FUNCTION 
guru( printer_one, 'printer 1 REGULAR CALL' )
guru( printer_two, 'printer 2 REGULAR CALL \n' )
#CALL A REGULAR FUNCTION THRU A LAMBDA
guru(lambda: printer_one('printer 1 LAMBDA CALL'))
guru(lambda: printer_two('printer 2 LAMBDA CALL'))

Ahora, guarde el archivo y presione F5 para ejecutar el programa. Si no cometió ningún error, el resultado debería ser algo como esto.

Salida:

impresora 1 LLAMADA REGULAR

impresora 2 LLAMADA REGULAR

impresora 1 LLAMADA LAMBDA

impresora 2 LLAMADA LAMBDA

Código Explicación

  1. Una función llamada guru que toma otra función como primer parámetro y cualquier otro argumento que la siga.
  2. printer_one es una función simple que imprime el parámetro pasado y lo devuelve.
  3. printer_two es similar a printer_one pero sin la declaración de retorno.
  4. En esta parte, estamos llamando a la función gurú y pasando las funciones de impresora y una cadena como parámetros.
  5. Esta es la sintaxis para lograr el cuarto paso (es decir, llamar a la función gurú) pero usando lambdas.

En la siguiente sección, aprenderá a usar funciones lambda con map(), reducir(), y filtro() en Python.

Uso de lambdas con funciones integradas de Python

Las funciones de Lambda brindan una forma elegante y poderosa de realizar operaciones utilizando métodos integrados en Python. Es posible porque las lambdas se pueden invocar inmediatamente y pasar como argumento a estas funciones.

IIFE en Python Lambda

IIFE significa ejecución de función invocada inmediatamente. Significa que se puede llamar a una función lambda tan pronto como se define. Entendamos esto con un ejemplo; encienda su IDLE y escriba lo siguiente:

 (lambda x: x + x)(2)

Aquí está el resultado y la explicación del código:

Esta capacidad de invocación inmediata de lambdas le permite usarlas dentro de funciones como map() y reduce(). Es útil porque es posible que no desee volver a utilizar estas funciones.

lambdas en filtro()

La función de filtro se utiliza para seleccionar algunos elementos particulares de una secuencia de elementos. La secuencia puede ser cualquier iterador como listas, conjuntos, tuplas, etc.

Los elementos que se seleccionarán se basan en alguna restricción predefinida. Toma 2 parámetros:

Por ejemplo,

sequences = [10,2,8,7,5,4,3,11,0, 1]
filtered_result = filter (lambda x: x > 4, sequences) 
print(list(filtered_result))

Aquí está el resultado:

[10, 8, 7, 5, 11]

Explicación del código:

1. En la primera declaración, definimos una lista llamada secuencias que contiene algunos números.

2. Aquí, declaramos una variable llamada filtered_result, que almacenará los valores filtrados devueltos por la función filter().

3. Una función lambda que se ejecuta en cada elemento de la lista y devuelve verdadero si es mayor que 4.

4. Imprime el resultado devuelto por la función de filtro.

lambdas en mapa()

la función map se usa para aplicar una operación particular a cada elemento en una secuencia. Al igual que filter(), también toma 2 parámetros:

  1. Una función que define la operación a realizar en los elementos
  2. Una o más secuencias

Por ejemplo, aquí hay un programa que imprime los cuadrados de los números en una lista dada:

sequences = [10,2,8,7,5,4,3,11,0, 1]
filtered_result = map (lambda x: x*x, sequences) 
print(list(filtered_result))

Salida:

 [100, 4, 64, 49, 25, 16, 9, 121, 0, 1]

[KR1]

Explicación del código:

  1. Aquí, definimos una lista llamada secuencias que contiene algunos números.
  2. Declaramos una variable llamada filtered_result que almacenará los valores asignados
  3. Una función lambda que se ejecuta en cada elemento de la lista y devuelve el cuadrado de ese número.
  4. Imprime el resultado devuelto por la función de mapa.

lambdas en reducir()

La función reduce, como map(), se usa para aplicar una operación a cada elemento en una secuencia. Sin embargo, difiere del mapa en su funcionamiento. Estos son los pasos seguidos por la función reduce() para calcular una salida:

Paso 1) Realice la operación definida en los 2 primeros elementos de la secuencia.

Paso 2) Guardar este resultado

Paso 3) Realice la operación con el resultado guardado y el siguiente elemento en la secuencia.

Paso 4) Repita hasta que no queden más elementos.

También toma dos parámetros:

  1. Una función que define la operación a realizar
  2. Una secuencia (cualquier iterador como listas, tuplas, etc.)

Por ejemplo, aquí hay un programa que devuelve el producto de todos los elementos de una lista:

from functools import reduce
sequences = [1,2,3,4,5]
product = reduce (lambda x, y: x*y, sequences)
print(product)

Aquí está el resultado:

120

Explicación del código:

  1. Importar reduce desde el módulo functools
  2. Aquí, definimos una lista llamada secuencias que contiene algunos números.
  3. Declaramos una variable llamada producto que almacenará el valor reducido
  4. Una función lambda que se ejecuta en cada elemento de la lista. Devolverá el producto de ese número según el resultado anterior.
  5. Imprime el resultado devuelto por la función reduce.

¿Por qué (y por qué no) usar funciones lambda?

Como verá en la siguiente sección, las lambdas se tratan igual que las funciones normales en el nivel del intérprete. En cierto modo, se podría decir que las lambdas proporcionan una sintaxis compacta para escribir funciones que devuelven una sola expresión.

Sin embargo, debe saber cuándo es una buena idea usar lambdas y cuándo evitarlas. En esta sección, aprenderá algunos de los principios de diseño que utilizan los desarrolladores de Python al escribir lambdas.

Uno de los casos de uso más comunes para lambdas es en la programación funcional, ya que Python admite un paradigma (o estilo) de programación conocido como programación funcional.

Te permite proporcionar una función como parámetro a otra función (por ejemplo, en mapa, filtro, etc.). En tales casos, el uso de lambdas ofrece una forma elegante de crear una función única y pasarla como parámetro.

¿Cuándo no debe usar Lambda?

Nunca debe escribir funciones lambda complicadas en un entorno de producción. Será muy difícil para los codificadores que mantienen su código descifrarlo. Si se encuentra haciendo expresiones complejas de una sola línea, sería una práctica mucho mejor definir una función adecuada. Como práctica recomendada, debe recordar que el código simple siempre es mejor que el código complejo.

Lambdas frente a funciones regulares

Como se indicó anteriormente, las lambdas son [vV4][J5] solo funciones que no tienen un identificador vinculado a ellas. En palabras más simples, son funciones sin nombres (por lo tanto, anónimas). Aquí hay una tabla para ilustrar la diferencia entre lambdas y funciones regulares en python.

Lambdas

Funciones regulares

Sintaxis:

lambda x : x + x

Sintaxis:

def (x) :
return x + x 

Las funciones lambda solo pueden tener una expresión en su cuerpo.

Las funciones regulares pueden tener múltiples expresiones y declaraciones en su cuerpo.

Las lambdas no tienen un nombre asociado con ellas. Es por eso que también se conocen como funciones anónimas.

Las funciones regulares deben tener un nombre y una firma.

Las lambdas no contienen una declaración de devolución porque el cuerpo se devuelve automáticamente.

Las funciones que necesitan devolver valor deben incluir una declaración de devolución.

¿Explicación de las diferencias?

La principal diferencia entre una función lambda y una normal es que la función lambda evalúa solo una expresión y produce un objeto de función. En consecuencia, podemos nombrar el resultado de la función lambda y usarlo en nuestro programa como hicimos en el ejemplo anterior.

Una función normal para el ejemplo anterior se vería así:

def adder (x, y):
return x + y 
print (adder (1, 2))

Aquí, tenemos que definir un nombre para la función que devuelve el resultado cuando llamamos eso. Una función lambda no contiene una declaración de devolución porque solo tendrá una única expresión que siempre se devuelve de forma predeterminada. Ni siquiera tiene que asignar una lambda, ya que se puede invocar de inmediato (consulte la siguiente sección). Como verá en el siguiente ejemplo, las lambdas se vuelven particularmente poderosas cuando las usamos con las funciones integradas de Python.

Sin embargo, es posible que aún se pregunte en qué se diferencian las lambdas de una función que devuelve una sola expresión (como la anterior). A nivel de intérprete, no hay mucha diferencia. Puede sonar sorprendente, pero el intérprete trata cualquier función lambda que defina en Python como una función normal.

Como puede ver en el diagrama, el intérprete de python maneja las dos definiciones de la misma manera cuando se convierte en código de bytes. Ahora, no puedes nombrar una función lambda porque está reservado por Python, pero cualquier otro nombre de función producirá el mismo código de bytes [KR6].

Resumen

[J5]He añadido una tabla, pero la explicación es necesaria para entender las diferencias.


python

  1. Argumentos de la función de Python
  2. Python Anónimo/Función Lambda
  3. Cierres Python
  4. Sobrecarga de operadores de C++ con ejemplos
  5. Funciones de C++ con ejemplos de programas
  6. Declaración Python Print():cómo imprimir con ejemplos
  7. Python String strip() Función con EJEMPLO
  8. Python String count () con EJEMPLOS
  9. Python String format() Explicar con EJEMPLOS
  10. Método Python String find() con ejemplos
  11. Función Python abs():Ejemplos de valores absolutos