Funciones en Python

Funciones en Python

Este artículo explica las funciones en Python.

YouTube Video

Funciones en Python

Las funciones en Python son una característica esencial para definir bloques de código reutilizables, lo que te permite organizar y simplificar tu programa llamándolas según sea necesario. El uso de funciones puede mejorar la legibilidad del código y adherirse al principio DRY (Don't Repeat Yourself, evita escribir el mismo código varias veces).

Definiendo funciones

Las funciones se definen utilizando la palabra clave def. La sintaxis básica es la siguiente:.

1def function_name(arg1, arg2, ..., argN):
2    """docstring (A brief description of the function)"""
3    processing
4    return return_value

Por ejemplo, para definir una función que sume dos números, escribirías:.

1def add(x, y):
2    """A function that adds two numbers and returns the result"""
3    return x + y

Llamando a funciones

Una función definida puede ser llamada y utilizada de la siguiente manera:.

1result = add(3, 4)
2print(result)  # Output: 7

Componentes de una función

  1. Nombre de la función: El nombre de la función, utilizado para llamarla.

  2. Argumentos (Parámetros): Nombres de las variables que reciben los datos pasados durante la llamada. Puedes definir cero o más argumentos.

  3. Cadena de documentación (Docstring): Una cadena utilizada para describir el propósito y uso de una función. Opcional.

  4. Cuerpo de la función: Un bloque indentado donde se escriben las instrucciones que ejecuta la función.

  5. Valor de retorno: El valor devuelto al llamador utilizando la declaración return. Si se omite return, None se devuelve por defecto.

Tipos de argumentos

En Python, hay varios tipos de argumentos.

  1. Argumentos posicionales: La forma estándar de pasar argumentos a las funciones.
  2. Argumentos por defecto: Argumentos con valores predeterminados que pueden omitirse durante la llamada.
1def greet(name, message="Hello"):
2    print(f"{message}, {name}")
3
4greet("Alice")  # "Hello, Alice"
5greet("Bob", "Good morning")  # "Good morning, Bob"
  1. Argumentos de longitud variable: *args para recibir múltiples argumentos posicionales como una tupla, y **kwargs para recibirlos como un diccionario.
1def func(*args, **kwargs):
2    print("args:", args)
3    print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}

Mediante el uso correcto de funciones, puedes escribir programas en Python de manera más efectiva y eficiente.

Funciones Lambda en Python

En Python, las funciones lambda se utilizan para definir funciones anónimas y concisas. A diferencia de las funciones definidas con la palabra clave def, lambda permite crear funciones cortas de una sola línea. Aquí explicaremos en detalle las funciones lambda en Python.

Conceptos básicos de las funciones lambda

Las funciones lambda, también llamadas funciones anónimas, se utilizan para definir funciones temporales que no tienen nombre, como sugiere el término. La sintaxis básica es la siguiente:.

1lambda arguments: expression
  • arguments: Especifica los argumentos de la función. Se pueden especificar múltiples argumentos, separados por comas.
  • expression: Es una expresión que se evalúa en función de los argumentos. El resultado de la expresión se convierte en el valor de retorno de la función.

Por ejemplo, el siguiente código define y ejecuta una función lambda que suma dos números.

1add = lambda x, y: x + y
2print(add(5, 3))  # Output: 8

En este ejemplo, lambda x, y: x + y es una función lambda que toma dos argumentos, x y y, y devuelve su suma.

Casos de uso de las funciones lambda

Las funciones lambda son útiles en situaciones donde necesitas definir una función simple en el momento. Son particularmente comunes en los siguientes casos:.

  1. Cuando se pasan como argumentos a funciones

    • Es útil en funciones de orden superior (funciones que toman otras funciones como argumentos) al pasar funciones cortas y temporales.
  2. Cuando se especifican claves para ordenar listas

    • Son útiles para especificar criterios de ordenación (claves) en funciones como sort() o sorted().

Ejemplo de uso en funciones de orden superior

Ejemplos típicos de funciones de orden superior incluyen map(), filter() y reduce(). Estas funciones toman otras funciones como argumentos y las aplican a secuencias como listas.

1numbers = [1, 2, 3, 4, 5]
2squared = list(map(lambda x: x ** 2, numbers))
3print(squared)  # Output: [1, 4, 9, 16, 25]

En este ejemplo, se pasa una función lambda a la función map() para elevar al cuadrado cada número en una lista.

Ejemplos de cómo usar la ordenación de listas

La función lambda a veces se puede utilizar para especificar una clave personalizada al ordenar una lista. Por ejemplo, el siguiente código ordena una lista de tuplas según el segundo elemento.

1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

En este ejemplo, se utiliza una función lambda para ordenar las tuplas según su segundo elemento (una cadena).

filter() y lambda

La función filter() se utiliza para filtrar elementos de una lista (u otro iterable) según una condición dada.

1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers)  # Output: [2, 4, 6, 8]

En este ejemplo, se filtran los números pares de una lista para crear una nueva lista.

lambda y reduce()

La función reduce() se utiliza para reducir una lista a un solo valor. Se puede implementar fácilmente utilizando una función lambda.

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

En este ejemplo, todos los elementos de la lista se multiplican entre sí para obtener un resultado.

Evita usar funciones lambda complejas

La ventaja de las funciones lambda es su brevedad, pero se vuelven más difíciles de leer cuando se utilizan para implementar lógica compleja. Por lo tanto, es apropiado usarlas para operaciones simples que se puedan expresar en una sola línea. Para operaciones complejas, definir una función con def es más legible y fácil de mantener.

Por ejemplo, deberías evitar usar funciones lambda complejas como la que se muestra a continuación.

1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)

En este caso, es mejor usar una función definida con def, como se muestra a continuación.

1def complex_func(x, y):
2    if x > y:
3        return x * 2 + y
4    else:
5        return x + y * 2

Conclusión

Las funciones lambda de Python son una herramienta conveniente para definir funciones temporales y cortas. A menudo se utilizan en funciones de orden superior o en operaciones con listas para definir de manera concisa condiciones específicas. Sin embargo, las funciones lambda deben limitarse a tareas simples, y se prefieren las funciones def para lógica compleja.

Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.

YouTube Video