Tipos de datos en Python 15 tipos que debes saber

Tiempo de lectura: 5 minutos

En Python, existen varios tipos de datos incorporados y estructuras de datos que puedes utilizar.

Python Book - pexels

Aquí te explico algunos de los más comunes y útiles:

1. Tipos de Datos Básicos:

  • Números enteros (int): Representan números enteros positivos o negativos.
  x = 5
  y = -10
  • Números de punto flotante (float): Representan números con decimales.
  pi = 3.14159
  • Cadenas de texto (str): Representan texto o secuencias de caracteres.
  nombre = "Juan"
  • Booleanos (bool): Solo pueden tener dos valores: True o False.
  es_mayor = True
  • Nulos (NoneType): El tipo de dato para representar la ausencia de valor.
  x = None

2. Estructuras de Datos:

  • Lista (list): Una colección ordenada que puede contener cualquier tipo de dato y permite duplicados. Es mutable (se puede modificar).
mi_lista = [1, 2, 3, "texto"]
mi_lista.append(4)  # Añade un elemento
print(mi_lista[0])  # Salida: 1
  • Diccionario (dict): Una colección no ordenada de pares clave-valor. Es mutable y las claves deben ser únicas.
mi_diccionario = {"nombre": "Juan", "edad": 25}
print(mi_diccionario["nombre"])  # Salida: Juan
  • Tupla (tuple): Una secuencia ordenada e inmutable de elementos. A diferencia de las listas, las tuplas no pueden modificarse después de ser creadas.
  mi_tupla = (10, 20, 30)
  • Conjunto (set): Una colección no ordenada de elementos únicos. Se usa para eliminar duplicados y realizar operaciones de conjuntos como intersección, unión, etc.
  mi_set = {1, 2, 3, 4, 4}  # El valor 4 aparecerá una sola vez
  • Frozenset: Es similar a un set, pero inmutable. Una vez creado, no se puede modificar.
  mi_frozenset = frozenset([1, 2, 3])

3. Tipos Avanzados:

  • Bytes (bytes): Representa una secuencia inmutable de bytes (datos binarios).
  datos = b"Hola Mundo"
  • Bytearray (bytearray): Similar a bytes, pero mutable. Puedes modificar los valores después de crearlo.
  datos_modificables = bytearray(b"Hola")
  • Range (range): Representa una secuencia de números, generalmente usado en bucles (for).
  rango = range(1, 10)  # Genera números del 1 al 9
  • Enumeradores (enum): Se usa para definir conjuntos de valores constantes con nombres simbólicos.
  from enum import Enum
  class Color(Enum):
      ROJO = 1
      VERDE = 2
      AZUL = 3

4. Colecciones Especializadas:

Python también proporciona estructuras de datos avanzadas a través del módulo collections:

  • Deque (collections.deque): Una lista doblemente enlazada que permite añadir y eliminar elementos de ambos extremos de manera eficiente.
  from collections import deque
  mi_deque = deque([1, 2, 3])
  mi_deque.appendleft(0)  # Añadir al inicio
  • Namedtuple (collections.namedtuple): Una tupla que permite acceso a los elementos mediante nombres, como si fuera un objeto.
  from collections import namedtuple
  Persona = namedtuple('Persona', ['nombre', 'edad'])
  juan = Persona(nombre="Juan", edad=25)
  print(juan.nombre)  # Salida: Juan
  • Counter (collections.Counter): Un diccionario especializado para contar elementos, útil para conteos de frecuencias.
  from collections import Counter
  conteo = Counter("abracadabra")
  print(conteo)  # Salida: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
  • Defaultdict (collections.defaultdict): Similar a un diccionario, pero con un valor por defecto si la clave no existe.
  from collections import defaultdict
  mi_diccionario = defaultdict(int)
  print(mi_diccionario["clave_inexistente"])  # Salida: 0 (por defecto es un int que empieza en 0)

5. Estructuras de Datos Personalizadas (Clases):

En Python, puedes definir tus propias clases para crear estructuras de datos personalizadas, que te permiten agrupar datos y funciones relacionados.

Ejemplo básico:

class Persona:
    def __init__(self, nombre, edad):
        self.nombre = nombre
        self.edad = edad

    def saludar(self):
        return f"Hola, mi nombre es {self.nombre} y tengo {self.edad} años."

juan = Persona("Juan", 25)
print(juan.saludar())  # Salida: Hola, mi nombre es Juan y tengo 25 años.

Esto te permite organizar datos y comportamientos de manera más estructurada.

6. Comprehensions (Comprensiones):

Las comprensiones son una forma compacta de crear listas, conjuntos o diccionarios aplicando condiciones o transformaciones en una sola línea de código. Son muy útiles para manipular colecciones de datos de manera eficiente y legible.

  • List comprehension:
  cuadrados = [x**2 for x in range(5)]
  print(cuadrados)  # Salida: [0, 1, 4, 9, 16]
  • Set comprehension:
  mi_set = {x for x in range(5)}
  print(mi_set)  # Salida: {0, 1, 2, 3, 4}
  • Dictionary comprehension:
  diccionario = {x: x**2 for x in range(5)}
  print(diccionario)  # Salida: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

7. Funciones Lambda:

Las funciones lambda son funciones anónimas o sin nombre que se definen en una sola línea. Son útiles para operaciones rápidas o como argumentos en otras funciones (como map(), filter() o sorted()).

Ejemplo de una función lambda:

doblar = lambda x: x * 2
print(doblar(5))  # Salida: 10

8. Manejo de Excepciones:

En Python, puedes gestionar errores y excepciones usando try, except, finally. Esto es útil para evitar que tu programa se bloquee si ocurre un error inesperado.

Ejemplo:

try:
    resultado = 10 / 0
except ZeroDivisionError:
    print("Error: No puedes dividir entre cero.")
finally:
    print("Esto siempre se ejecuta.")

9. Iteradores e Iterables:

Un iterador es un objeto que permite recorrer una secuencia (como una lista o tupla) uno a uno. Los iteradores se crean de manera implícita en bucles for y al usar funciones como next(). También puedes crear iteradores personalizados.

Ejemplo básico con iter() y next():

mi_lista = [1, 2, 3]
iterador = iter(mi_lista)
print(next(iterador))  # Salida: 1
print(next(iterador))  # Salida: 2

10. Generadores:

Los generadores son una forma eficiente de trabajar con iteradores. Se crean con funciones que usan la palabra clave yield en lugar de return, permitiendo que la función retenga su estado entre llamadas.

Ejemplo:

def contador(max):
    n = 0
    while n < max:
        yield n
        n += 1

for num in contador(5):
    print(num)  # Salida: 0, 1, 2, 3, 4

11. Manejo de Archivos:

Python tiene funciones integradas para trabajar con archivos de forma fácil. Puedes abrir, leer, escribir y cerrar archivos utilizando la función open().

Ejemplo de lectura de archivo:

with open('archivo.txt', 'r') as archivo:
    contenido = archivo.read()
    print(contenido)

El uso de with asegura que el archivo se cierre automáticamente una vez finalizado el bloque.

12. Decoradores:

Los decoradores son una forma de modificar el comportamiento de funciones o métodos. Se usan a menudo en casos como logging, control de acceso, etc.

Ejemplo básico:

def decorador(funcion):
    def nueva_funcion():
        print("Función decorada")
        funcion()
    return nueva_funcion

@decorador
def saludar():
    print("Hola!")

saludar()
# Salida:
# Función decorada
# Hola!

13. Context Managers:

Los gestores de contexto permiten manejar recursos (como archivos o conexiones) asegurando su correcta liberación una vez finalizados, usando with.

Ejemplo de un gestor de contexto personalizado:

class MiRecurso:
    def __enter__(self):
        print("Recurso abierto")
        return self

    def __exit__(self, tipo, valor, traceback):
        print("Recurso cerrado")

with MiRecurso():
    print("Usando el recurso")
# Salida:
# Recurso abierto
# Usando el recurso
# Recurso cerrado

14. Anotaciones de Tipos:

Python permite anotaciones de tipos para ayudar a la lectura del código y facilitar el uso de herramientas de análisis estático, como mypy.

Ejemplo:

def suma(a: int, b: int) -> int:
    return a + b

15. Programación Funcional:

Python admite ciertos conceptos de programación funcional, como las funciones map(), filter(), y reduce().

  • map(): Aplica una función a cada elemento de una secuencia.
  cuadrados = list(map(lambda x: x**2, [1, 2, 3]))
  • filter(): Filtra elementos que cumplen una condición.
  pares = list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4]))
  • reduce(): Reduce una secuencia a un solo valor (requiere functools).
  from functools import reduce
  suma_total = reduce(lambda x, y: x + y, [1, 2, 3, 4])

Deja un comentario