Hasta el momento, cada vez que tenías que realizar dos o mas veces una serie de operaciones, tenías que repetir el código que habías escrito. Sin embargo, esto no es necesario gracias a las funciones. Las funciones nos permiten reutilizar código, tantas veces como necesitemos, cuando lo necesitemos y donde lo necesitemos. En esta pyldora verás lo sencillo que es crear tus propias funciones para utilizarlas donde y cuando lo necesites.
Funciones o como evitar repetir código
¿Que son las funciones?
Las funciones en Python son bloques de código reutilizables que realizan una tarea específica. Las funciones permiten organizar y modularizar el código, lo que lo hace más fácil de leer, probar y mantener.
La sintaxis básica para definir una función en Python es la siguiente:
def nombre_de_la_función(argumentos):
# cuerpo de la función
# puede incluir varias sentencias
return valor_o_resultado
Por ejemplo, aquí está una función que toma dos números como argumentos y devuelve su suma:
def suma(a, b):
result = a + b
return result
Para llamar a una función, se utiliza su nombre seguido de paréntesis que incluyen cualquier argumento necesario:
resultado = suma(1, 2)
print(resultado) # imprime 3
En este ejemplo, la función suma se llama con los argumentos 1 y 2 y devuelve 3, que se asigna a la variable resultado. Finalmente, se imprime el valor de resultado.
Tipos de funciones
Existen dos tipos de funciones, las built-in
y el resto. Las funciones built-in son funciones integradas en el lenguaje y están disponibles para su uso sin tener que importarlas o definirlas. Algunos ejemplos de funciones built-in son print(), len(), str(), int(), float(), etc.
Por otro lado, las funciones no built-in son aquellas que son definidas por el usuario o importadas desde módulos o paquetes externos.
La principal diferencia entre las funciones built-in y las demás es que las funciones built-in están siempre disponibles para su uso sin tener que importarlas, mientras que las demás deben ser importadas o definidas por el usuario antes de poder ser utilizadas.
Además, las funciones built-in también pueden ser más eficientes y tener un rendimiento mejor que las funciones definidas por el usuario, ya que están optimizadas y diseñadas específicamente para el lenguaje Python. Sin embargo, esto no siempre es el caso y depende de la función en particular.
Argumentos de funciones ¿por valor o por referencia?
En Python, las funciones pasan los argumentos por asignación, lo que significa que los argumentos se refieren a objetos en la memoria, pero no se pasa el objeto en sí.
Si el objeto es mutable (por ejemplo, una lista o un diccionario), cualquier cambio realizado dentro de la función se reflejará en el objeto original, ya que se está modificando el mismo objeto en la memoria.
Si el objeto es inmutable (por ejemplo, un entero o una cadena), cualquier cambio realizado dentro de la función no se reflejará en el objeto original, ya que se está creando un nuevo objeto en la memoria.
En resumen, los argumentos en Python son pasados por asignación, lo que significa que pueden ser mutables o inmutables y que los cambios realizados dentro de la función dependen de su tipo de datos.
El asterisco y el doble asterisco
En Python, el asterisco () y el doble asterisco (*) se utilizan para desempaquetar argumentos en una llamada a una función.
El operador * se utiliza para desempaquetar una lista de argumentos posicionales en una función. Por ejemplo:
def imprimir_argumentos(*args):
for arg in args:
print(arg)
imprimir_argumentos(1, 2, 3)
# imprime
# 1
# 2
# 3
En este ejemplo, la función imprimir_argumentos toma cualquier número de argumentos y los imprime uno por uno. La lista de argumentos se desempaqueta en una tupla llamada args usando el operador *.
El operador ** se utiliza para desempaquetar un diccionario de argumentos con nombre en una función. Por ejemplo:
def imprimir_argumentos_kwargs(**kwargs):
for key, value in kwargs.items():
print(f"{key}={value}")
imprimir_argumentos_kwargs(a=1, b=2, c=3)
# imprime
# a=1
# b=2
# c=3
En este ejemplo, la función imprimir_argumentos_kwargs toma cualquier número de argumentos con nombre y los imprime uno por uno. El diccionario de argumentos se desempaqueta en un diccionario llamado kwargs usando el operador **.
El vídeo
En el vídeo puedes ejemplos prácticos de lo que te he contado,