Introducción
En este laboratorio, aprenderás cómo verificar si una lista contiene elementos de un tipo específico en Python. Esto implica comprender el concepto de comprobación de tipos, que es crucial para escribir código robusto y mantenible en el entorno de tipado dinámico de Python.
Explorarás los tipos de datos básicos de Python y usarás la función type() para identificar el tipo de las variables. El laboratorio te guiará en la creación de un script de Python para demostrar la comprobación de tipos y luego introducirá la función isinstance() junto con all() para verificar si todos los elementos de una lista son de un tipo deseado.
Aprende sobre la comprobación de tipos
En este paso, exploraremos el concepto de comprobación de tipos en Python. La comprobación de tipos es el proceso de verificar que los tipos de valores utilizados en un programa son consistentes con lo que se espera. Python es un lenguaje de tipado dinámico, lo que significa que la comprobación de tipos se realiza principalmente en tiempo de ejecución. Sin embargo, entender cómo comprobar los tipos y asegurarse de que son correctos es crucial para escribir código robusto y mantenible.
Comencemos por entender los tipos de datos básicos en Python:
- int: Representa números enteros (por ejemplo, 1, 2, -5).
- float: Representa números de punto flotante (por ejemplo, 3.14, 2.0).
- str: Representa cadenas de texto (por ejemplo, "hello", "world").
- bool: Representa valores booleanos (True o False).
- list: Representa una colección ordenada de elementos (por ejemplo,
[1, 2, 3]). - tuple: Representa una colección ordenada e inmutable de elementos (por ejemplo,
(1, 2, 3)). - dict: Representa una colección de pares clave-valor (por ejemplo,
{"name": "Alice", "age": 30}).
Para comprobar el tipo de una variable, puedes usar la función type(). Creemos un script de Python para demostrar esto.
Abre el editor de VS Code en el entorno de LabEx.
Crea un nuevo archivo llamado
type_checking.pyen el directorio~/project.~/project/type_checking.pyAñade el siguiente código a
type_checking.py:## Assign values to different variables x = 10 y = 3.14 name = "Bob" is_valid = True my_list = [1, 2, 3] my_tuple = (4, 5, 6) my_dict = {"key": "value"} ## Print the type of each variable print(f"Type of x: {type(x)}") print(f"Type of y: {type(y)}") print(f"Type of name: {type(name)}") print(f"Type of is_valid: {type(is_valid)}") print(f"Type of my_list: {type(my_list)}") print(f"Type of my_tuple: {type(my_tuple)}") print(f"Type of my_dict: {type(my_dict)}")Este script asigna valores de diferentes tipos a variables y luego utiliza la función
type()para imprimir el tipo de cada variable.Ejecuta el script usando el comando
pythonen la terminal:python ~/project/type_checking.pyDeberías ver una salida similar a la siguiente:
Type of x: <class 'int'> Type of y: <class 'float'> Type of name: <class 'str'> Type of is_valid: <class 'bool'> Type of my_list: <class 'list'> Type of my_tuple: <class 'tuple'> Type of my_dict: <class 'dict'>Esta salida muestra el tipo de cada variable, confirmando que Python identifica correctamente el tipo de cada valor.
Entender los tipos de tus variables es esencial para realizar operaciones correctamente. Por ejemplo, no puedes sumar directamente una cadena a un entero sin convertir primero la cadena a un entero.
## Example of type error
x = 10
name = "Bob"
## This will raise a TypeError
## result = x + name
Si descomentas la última línea del script, encontrarás un TypeError porque Python no sabe cómo sumar un entero y una cadena.
Para solucionar esto, necesitarías convertir el entero a una cadena o viceversa, dependiendo del resultado deseado.
## Convert integer to string
x = 10
name = "Bob"
result = str(x) + name
print(result) ## Output: 10Bob
En los siguientes pasos, exploraremos técnicas más avanzadas para la comprobación de tipos y la garantía de la consistencia de tipos en tu código de Python.
Utiliza all() con isinstance()
En este paso, aprenderemos cómo usar la función all() en combinación con la función isinstance() para realizar una comprobación de tipos más sofisticada en colecciones de datos. Esto es especialmente útil cuando necesitas asegurarte de que todos los elementos en una lista, tupla u otro iterable tienen un tipo específico.
La función isinstance() se utiliza para comprobar si un objeto es una instancia de una clase o tipo particular. Toma dos argumentos: el objeto a comprobar y el tipo contra el que se va a comprobar. Devuelve True si el objeto es una instancia del tipo, y False en caso contrario.
La función all() se utiliza para comprobar si todos los elementos en un iterable son verdaderos. Toma un argumento: un iterable (por ejemplo, una lista, tupla o conjunto). Devuelve True si todos los elementos en el iterable son verdaderos, y False en caso contrario.
Al combinar estas dos funciones, podemos comprobar fácilmente si todos los elementos en una colección tienen un tipo específico.
Abre el editor de VS Code en el entorno de LabEx.
Crea un nuevo archivo llamado
type_checking_all.pyen el directorio~/project.~/project/type_checking_all.pyAñade el siguiente código a
type_checking_all.py:## List of values values = [1, 2, 3, 4, 5] ## Check if all values are integers all_integers = all(isinstance(x, int) for x in values) ## Print the result print(f"Are all values integers? {all_integers}") ## List with mixed types mixed_values = [1, 2, "3", 4, 5] ## Check if all values are integers all_integers_mixed = all(isinstance(x, int) for x in mixed_values) ## Print the result print(f"Are all values integers in mixed_values? {all_integers_mixed}") ## List of strings string_values = ["a", "b", "c"] ## Check if all values are strings all_strings = all(isinstance(x, str) for x in string_values) ## Print the result print(f"Are all values strings? {all_strings}")Este script demuestra cómo usar
all()yisinstance()para comprobar los tipos de los elementos en una lista.Ejecuta el script usando el comando
pythonen la terminal:python ~/project/type_checking_all.pyDeberías ver una salida similar a la siguiente:
Are all values integers? True Are all values integers in mixed_values? False Are all values strings? TrueEsta salida muestra que la función
all()identifica correctamente si todos los elementos en la lista son del tipo especificado.
Analicemos cómo funciona esto:
isinstance(x, int)comprueba si el elementoxes un entero.(isinstance(x, int) for x in values)es una expresión generadora que devuelveTrueoFalsepara cada elemento en la listavalues.all(...)luego comprueba si todos los valores devueltos por la expresión generadora sonTrue.
Este enfoque es muy flexible y se puede utilizar para comprobar cualquier tipo o combinación de tipos en una colección.
Especifica 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.pyen el directorio~/project.~/project/type_hints.pyAgrega 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: intyy: intespecifican que los argumentosxeydeben ser enteros.-> intespecifica que la funciónadd_numbersdebe devolver un entero.result: intespecifica que la variableresultdebe ser un entero.
Ejecuta el script utilizando el comando
pythonen la terminal:python ~/project/type_hints.pyDeberías ver una salida similar a la siguiente:
Result: 8El 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
mypymarcarí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.
Resumen
En este laboratorio, el primer paso se centra en comprender la comprobación de tipos en Python, un lenguaje de tipado dinámico donde la verificación de tipos se realiza principalmente en tiempo de ejecución. El laboratorio presenta los tipos de datos fundamentales de Python, incluyendo int, float, str, bool, list, tuple y dict.
Luego, el laboratorio demuestra cómo usar la función type() para determinar el tipo de datos de una variable. Se crea un script de Python llamado type_checking.py para asignar valores de diferentes tipos a variables y, posteriormente, imprimir sus respectivos tipos utilizando la función type().



