11.1 Número infinito de parámetros
En Python, las funciones pueden ser diseñadas para aceptar infinitos
parámetros. Esto se logra usando argumentos pasados a través de
*args
para parámetros regulares y **kwargs
para
parámetros pasados por nombre.
Uso de *args
*args
permite que una función acepte un número arbitrario de
argumentos posicionales, que la función tratará como una tupla.
Ejemplo de uso:
def print_all(*args):
for item in args:
print(item)
print_all(1, 'apple', True) # imprimirá 1, apple y True.
La variable args
contendrá una tupla con todos
los parámetros que fueron pasados a la función al ser llamada.
Uso de **kwargs
**kwargs
funciona de manera similar a *args
, pero para
argumentos pasados por nombre, representados como un diccionario. Esto permite
que una función acepte cualquier cantidad de argumentos con nombre:
def print_named_items(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_named_items(fruit='apple', number=1) # imprimirá fruit: apple y number: 1
Estos mecanismos hacen que las funciones sean extremadamente flexibles y útiles en escenarios donde se desconoce la cantidad de parámetros de antemano, como al desarrollar APIs o funciones para el manejo de eventos.
Veremos ambos casos con más detalle más adelante, pero debes saber que en Python dentro de una función es muy fácil acceder a todos los argumentos que le pasaste. Y puedes pasar a la función todo lo que quieras.
11.2 Especificación de tipos
Como sabrás, las variables en Python no tienen un tipo especificado de antemano. A cualquier variable se le puede asignar un valor de cualquier tipo, y en la siguiente línea asignarle un valor de un nuevo tipo, etc.
Esto es muy conveniente para programas pequeños, pero no tanto para los grandes. Cuando el programa es muy grande y el número de funciones es de miles, el programador no puede recordar qué datos exactamente debe pasar a una función y en qué orden.
En lenguajes con tipado estático, el IDE indica a los programadores qué parámetros y de qué tipos deben pasarse al llamar una función. Pero Python es un lenguaje con tipado dinámico, y aquí esas indicaciones no surgen de la nada.
Por eso, los creadores de Python idearon algo llamado
type hinting
. Es algo así como los tipos de variables, pero
son más bien recomendaciones que tipos. Los tipos indicados no imponen
restricciones.
La especificación de tipos fue introducida en Python 3.5 y se hizo popular gracias al estándar PEP 484. Este es un mecanismo que permite a los programadores definir los tipos esperados de variables, argumentos y valores devueltos de funciones.
Aunque Python sigue siendo un lenguaje de tipado dinámico, la indicación de tipos añade claridad y permite la comprobación estática de tipos. Ejemplos de especificación de tipos:
def add_numbers(a: int, b: int) -> int:
return a + b
El tipo de una variable se indica a través de dos puntos, y el tipo del resultado devuelto por la función con una flecha.
Ventajas que ofrece la especificación de tipo-recomendación:
- Mejora de la documentación: Una indicación explícita de tipos hace que el código sea auto documentable.
- Mejor autocompletado: Los editores de código pueden usar la información sobre tipos para mejorar el autocompletado.
- Ayuda en la depuración: La comprobación estática de tipos puede detectar potenciales errores antes de ejecutar el programa.
Herramientas para trabajar con tipos
Python en sí no reacciona a los tipos de variables declarados. En su lugar, Python tiene una utilidad especial — mypy — un popular analizador de tipos estático que ayuda a detectar errores en el código que utiliza la indicación de tipos.
GO TO FULL VERSION