Tipos en Python
Este artículo explica los tipos en Python.
YouTube Video
Tipos en Python
El módulo typing
en Python se utiliza para introducir pistas de tipo en Python. Fue introducido originalmente en Python 3.5 y se utiliza para mejorar la legibilidad y el mantenimiento del código. Las pistas de tipo no afectan la ejecución del código, pero permiten la verificación de tipos con IDEs y herramientas de análisis estático.
Conceptos básicos de las pistas de tipo
Las pistas de tipo aclaran la intención del código al especificar explícitamente los tipos de funciones y variables. En el ejemplo a continuación, se especifican los tipos de los argumentos y el valor de retorno.
1def add_numbers(a: int, b: int) -> int:
2 return a + b
3
4result: int = add_numbers(5, 10)
5print(result) # 15
En el código anterior, a
y b
son del tipo entero (int
), y el valor de retorno de la función también se especifica explícitamente como un entero. Incluso con las pistas de tipo, los tipos no se aplican estrictamente, pero pueden mostrarse advertencias durante el desarrollo si hay discrepancias de tipos.
Pistas de tipo clave
El módulo typing
en Python proporciona varias clases y funciones para definir pistas de tipo. A continuación se muestra una lista de pistas de tipo comunes.
int
: enterostr
: cadena de textofloat
: número de punto flotantebool
: booleanoList
: listaDict
: diccionarioTuple
: tuplaSet
: conjunto
Tipo List
El tipo de lista se especifica usando la clase List
. También puedes especificar explícitamente el tipo de elementos dentro de una lista.
1from typing import List
2
3def sum_list(numbers: List[int]) -> int:
4 return sum(numbers)
5
6print(sum_list([1, 2, 3])) # 6
En este ejemplo, se espera que todos los elementos de la lista sean del tipo int
.
Tipo Dict
Un tipo de diccionario se define usando Dict
. Se pueden especificar los tipos de claves y valores.
1from typing import Dict
2
3def get_student_age(students: Dict[str, int], name: str) -> int:
4 return students.get(name, 0)
5
6students = {"Alice": 23, "Bob": 19}
7print(get_student_age(students, "Alice")) # 23
En este ejemplo, el diccionario usa str
como tipo de clave y int
como tipo de valor.
Tipo Tuple
Las tuplas se especifican usando el tipo Tuple
. Puedes especificar el tipo de cada elemento en una tupla de manera individual.
1from typing import Tuple
2
3def get_person() -> Tuple[str, int]:
4 return "Alice", 30
5
6name, age = get_person()
7print(name, age) # Alice 30
Aquí, se muestra que la función get_person
devuelve una tupla que contiene una cadena y un entero.
Tipo Union
El tipo Union
se utiliza para indicar explícitamente que se aceptan múltiples tipos.
1from typing import Union
2
3def process_value(value: Union[int, float]) -> float:
4 return value * 2.0
5
6print(process_value(10)) # 20.0
7print(process_value(3.5)) # 7.0
En este ejemplo, la función process_value
acepta como argumento un int
o un float
y devuelve un resultado del tipo float
.
Tipo Optional
El tipo Optional
se usa cuando una variable podría ser None
. Se proporciona como una abreviatura para Union[Type, None]
.
1from typing import Optional
2
3def greet(name: Optional[str] = None) -> str:
4 if name is None:
5 return "Hello, Guest!"
6 return f"Hello, {name}!"
7
8print(greet()) # Hello, Guest!
9print(greet("Alice")) # Hello, Alice!
Aquí, se muestra que cuando name
no está especificado, se trata como None
.
Tipos Genéricos
Los tipos genéricos son una forma de representar de manera abstracta qué tipo de elementos contiene una estructura de datos. En el módulo typing
, puedes definir tipos genéricos usando TypeVar
.
1from typing import TypeVar, List
2
3T = TypeVar('T')
4
5def get_first_element(elements: List[T]) -> T:
6 return elements[0]
7
8print(get_first_element([1, 2, 3])) # 1
9print(get_first_element(["a", "b", "c"])) # a
En este ejemplo, get_first_element
es una función que devuelve el primer elemento de una lista y funciona independientemente del tipo de la lista.
Alias de Tipos
Un alias de tipo es una forma de simplificar definiciones de tipos complejos dándoles un nombre claro.
1from typing import List, Tuple
2
3Coordinates = List[Tuple[int, int]]
4
5def get_coordinates() -> Coordinates:
6 return [(0, 0), (1, 1), (2, 2)]
7
8print(get_coordinates()) # [(0, 0), (1, 1), (2, 2)]
En este ejemplo, se define un alias de tipo Coordinates
para representar simplemente un tipo con tuplas dentro de una lista.
Resumen
El módulo typing
en Python es muy útil para mejorar la legibilidad y el mantenimiento del código. Al utilizar correctamente las anotaciones de tipo, puedes ayudar a prevenir incompatibilidades de tipo y errores, especialmente en proyectos a gran escala o en desarrollos en equipo. Los tipos son simplemente una herramienta de apoyo para el desarrollo y no afectan el comportamiento en tiempo de ejecución, manteniendo así la flexibilidad del código.
Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.