Especificar el tipo deseado
En este paso, exploraremos cómo especificar el tipo deseado para variables y argumentos de función, y cómo aplicar estos tipos utilizando sugerencias de tipo (type hints) y comprobaciones condicionales. Si bien Python es un lenguaje de tipado dinámico, las sugerencias de tipo te permiten agregar información de tipo estática a tu código, la cual puede ser utilizada por verificadores de tipos como mypy
para detectar errores de tipo antes de la ejecución.
Las sugerencias de tipo son anotaciones que especifican el tipo esperado de una variable, un argumento de función o el valor de retorno de una función. Se escriben utilizando la sintaxis :
para variables y argumentos, y la sintaxis ->
para valores de retorno.
Comencemos agregando sugerencias de tipo a nuestro ejemplo anterior.
-
Abre el editor de VS Code en el entorno de LabEx.
-
Crea un nuevo archivo llamado type_hints.py
en el directorio ~/project
.
~/project/type_hints.py
-
Agrega el siguiente código a type_hints.py
:
def add_numbers(x: int, y: int) -> int:
"""Adds two numbers together."""
return x + y
## Example usage
result: int = add_numbers(5, 3)
print(f"Result: {result}")
## Example with incorrect types
## This will not raise an error at runtime, but a type checker will flag it
## result: int = add_numbers("5", "3")
## print(f"Result: {result}")
En este script:
x: int
y y: int
especifican que los argumentos x
e y
deben ser enteros.
-> int
especifica que la función add_numbers
debe devolver un entero.
result: int
especifica que la variable result
debe ser un entero.
-
Ejecuta el script utilizando el comando python
en la terminal:
python ~/project/type_hints.py
Deberías ver una salida similar a la siguiente:
Result: 8
El script se ejecuta sin errores porque los tipos son correctos. Sin embargo, si descomentas las líneas con tipos incorrectos, el script seguirá ejecutándose, pero un verificador de tipos como mypy
marcaría esas líneas como errores de tipo.
Para instalar y ejecutar mypy
, puedes utilizar los siguientes comandos:
pip install mypy
mypy ~/project/type_hints.py
Dado que pip
no está preconfigurado, es posible que encuentres errores relacionados con paquetes faltantes o versiones incorrectas. Con fines de este laboratorio, nos centraremos en demostrar el concepto de sugerencias de tipo y comprobaciones condicionales.
Otra forma de aplicar tipos es utilizar comprobaciones condicionales dentro de tu código. Esto te permite lanzar excepciones si los tipos no son los que se esperan.
def divide_numbers(x, y):
if not isinstance(x, (int, float)):
raise TypeError("x must be a number")
if not isinstance(y, (int, float)):
raise TypeError("y must be a number")
if y == 0:
raise ValueError("y cannot be zero")
return x / y
## Example usage
result = divide_numbers(10, 2)
print(f"Result: {result}")
## Example with incorrect types
## This will raise a TypeError
## result = divide_numbers("10", 2)
## print(f"Result: {result}")
En este ejemplo, utilizamos isinstance()
para comprobar si x
e y
son números (ya sea int
o float
). Si no lo son, lanzamos un TypeError
. También comprobamos si y
es cero y lanzamos un ValueError
si lo es.
Al combinar sugerencias de tipo y comprobaciones condicionales, puedes escribir código Python más robusto y mantenible, menos propenso a errores de tipo.