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
-
Nombre de la función: El nombre de la función, utilizado para llamarla.
-
Argumentos (Parámetros): Nombres de las variables que reciben los datos pasados durante la llamada. Puedes definir cero o más argumentos.
-
Cadena de documentación (Docstring): Una cadena utilizada para describir el propósito y uso de una función. Opcional.
-
Cuerpo de la función: Un bloque indentado donde se escriben las instrucciones que ejecuta la función.
-
Valor de retorno: El valor devuelto al llamador utilizando la declaración
return
. Si se omitereturn
,None
se devuelve por defecto.
Tipos de argumentos
En Python, hay varios tipos de argumentos.
- Argumentos posicionales: La forma estándar de pasar argumentos a las funciones.
- 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"
- 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:.
-
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.
-
Cuando se especifican claves para ordenar listas
- Son útiles para especificar criterios de ordenación (claves) en funciones como
sort()
osorted()
.
- Son útiles para especificar criterios de ordenación (claves) en funciones como
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.