Python
Python Cheatsheet
Section titled “Python Cheatsheet”Chuleta de referencia rápida de Python. Indexada por títulos para Obsidian.
Variables y tipos
Section titled “Variables y tipos”Tipos básicos
Section titled “Tipos básicos”entero = 42 # intdecimal = 3.14 # floattexto = "hola" # strbooleano = True # boolnada = None # NoneTypecomplejo = 2 + 3j # complexConversión de tipos (casting)
Section titled “Conversión de tipos (casting)”int("42") # 42float("3.14") # 3.14str(42) # "42"bool(0) # Falselist("abc") # ['a', 'b', 'c']int("1010", 2) # 10 (binario a decimal)Comprobar el tipo
Section titled “Comprobar el tipo”type(x) # devuelve el tipoisinstance(x, int) # True si x es intisinstance(x, (int, float)) # True si es int O floatStrings (cadenas de texto)
Section titled “Strings (cadenas de texto)”Operaciones básicas
Section titled “Operaciones básicas”s = "Hola Mundo"len(s) # 10s.upper() # "HOLA MUNDO"s.lower() # "hola mundo"s.title() # "Hola Mundo"s.strip() # quita espacios de los extremoss.replace("a", "e") # reemplazas.split(" ") # ['Hola', 'Mundo']",".join(lista) # une lista con comaf-strings (formateo moderno)
Section titled “f-strings (formateo moderno)”nombre = "Ana"edad = 30f"{nombre} tiene {edad} años"f"{3.14159:.2f}" # "3.14" (2 decimales)f"{1000000:,}" # "1,000,000" (separador de miles)f"{0.25:.1%}" # "25.0%" (porcentaje)f"{42:05d}" # "00042" (relleno con ceros)f"{nombre=}" # "nombre='Ana'" (debug)Búsqueda y comprobación
Section titled “Búsqueda y comprobación”s.startswith("Hola") # Trues.endswith("do") # True"Mundo" in s # Trues.find("Mundo") # índice o -1s.count("o") # nº de aparicioness.isdigit() # solo dígitoss.isalpha() # solo letrasSlicing (rebanado)
Section titled “Slicing (rebanado)”s = "Python"s[0] # 'P's[-1] # 'n's[0:3] # 'Pyt's[2:] # 'thon's[:3] # 'Pyt's[::-1] # 'nohtyP' (invertir)s[::2] # 'Pto' (de 2 en 2)Listas
Section titled “Listas”Creación y acceso
Section titled “Creación y acceso”lista = [1, 2, 3, 4, 5]lista[0] # 1lista[-1] # 5lista[1:3] # [2, 3]Métodos comunes
Section titled “Métodos comunes”lista.append(6) # añade al finallista.insert(0, 0) # inserta en posiciónlista.extend([7, 8]) # añade varioslista.remove(3) # elimina primer valor 3lista.pop() # saca y devuelve el últimolista.pop(0) # saca por índicelista.index(4) # busca posiciónlista.count(2) # cuenta aparicioneslista.sort() # ordena in-placelista.sort(reverse=True) # descendentelista.reverse() # inviertesorted(lista) # devuelve copia ordenadalista.clear() # vacíaList comprehensions
Section titled “List comprehensions”[x*2 for x in range(5)] # [0, 2, 4, 6, 8][x for x in range(10) if x % 2 == 0] # pares[x if x > 0 else 0 for x in nums] # con else[(x, y) for x in a for y in b] # anidadoOperaciones útiles
Section titled “Operaciones útiles”sum(lista) # sumamax(lista) # máximomin(lista) # mínimolen(lista) # longitudany(lista) # True si algún elemento es Trueall(lista) # True si todos son Truelist(reversed(lista))list(set(lista)) # eliminar duplicadosDiccionarios
Section titled “Diccionarios”Creación y acceso
Section titled “Creación y acceso”d = {"nombre": "Ana", "edad": 30}d["nombre"] # "Ana"d.get("edad") # 30d.get("pais", "N/A") # valor por defecto si no existeMétodos comunes
Section titled “Métodos comunes”d.keys() # clavesd.values() # valoresd.items() # pares (clave, valor)d.update({"pais": "ES"}) # añade/actualizad.pop("edad") # elimina y devuelved.setdefault("x", 0) # devuelve o crea con default"nombre" in d # comprueba clavedel d["nombre"] # eliminaRecorrer un diccionario
Section titled “Recorrer un diccionario”for clave, valor in d.items(): print(clave, valor)
for clave in d: print(clave)Dict comprehensions
Section titled “Dict comprehensions”{k: v for k, v in pares}{x: x**2 for x in range(5)} # {0:0, 1:1, 2:4...}{k: v for k, v in d.items() if v > 0}Tuplas y sets
Section titled “Tuplas y sets”Tuplas (inmutables)
Section titled “Tuplas (inmutables)”t = (1, 2, 3)t[0] # 1a, b, c = t # desempaquetadox, *resto = (1, 2, 3, 4) # x=1, resto=[2,3,4]Sets (conjuntos, sin duplicados)
Section titled “Sets (conjuntos, sin duplicados)”s = {1, 2, 3}s.add(4)s.remove(2)s.discard(9) # no falla si no existea | b # unióna & b # interseccióna - b # diferenciaa ^ b # diferencia simétricaControl de flujo
Section titled “Control de flujo”Condicionales
Section titled “Condicionales”if x > 0: print("positivo")elif x == 0: print("cero")else: print("negativo")
# Operador ternarioresultado = "par" if x % 2 == 0 else "impar"match (Python 3.10+)
Section titled “match (Python 3.10+)”match comando: case "inicio": arrancar() case "parar" | "stop": detener() case _: print("desconocido")Bucles for
Section titled “Bucles for”for i in range(5): # 0,1,2,3,4 print(i)
for i in range(2, 10, 2): # 2,4,6,8 print(i)
for i, valor in enumerate(lista): # índice + valor print(i, valor)
for a, b in zip(lista1, lista2): # en paralelo print(a, b)Bucles while
Section titled “Bucles while”while x < 10: x += 1 if x == 5: continue # salta a la siguiente iteración if x == 8: break # sale del bucleelse: print("terminado sin break")Funciones
Section titled “Funciones”Definición básica
Section titled “Definición básica”def saludar(nombre): return f"Hola {nombre}"
def sumar(a, b=0): # valor por defecto return a + bArgumentos variables
Section titled “Argumentos variables”def funcion(*args, **kwargs): print(args) # tupla de posicionales print(kwargs) # dict de nombrados
funcion(1, 2, 3, x=10, y=20)Lambda (funciones anónimas)
Section titled “Lambda (funciones anónimas)”doble = lambda x: x * 2sorted(lista, key=lambda p: p.edad)Type hints (anotaciones de tipo)
Section titled “Type hints (anotaciones de tipo)”def dividir(a: int, b: int) -> float: return a / b
def procesar(nombre: str, edad: int | None = None) -> dict: return {"nombre": nombre, "edad": edad}Manejo de errores (try/except)
Section titled “Manejo de errores (try/except)”Estructura básica
Section titled “Estructura básica”try: resultado = 10 / 0except ZeroDivisionError: print("No se puede dividir por cero")except (ValueError, TypeError) as e: print(f"Error: {e}")else: print("Todo bien") # si no hubo errorfinally: print("Siempre se ejecuta")Lanzar excepciones
Section titled “Lanzar excepciones”raise ValueError("mensaje de error")raise Exception(f"Fallo con id {id}")Excepciones personalizadas
Section titled “Excepciones personalizadas”class MiError(Exception): pass
raise MiError("algo salió mal")Clases y objetos
Section titled “Clases y objetos”Definición básica
Section titled “Definición básica”class Persona: def __init__(self, nombre, edad): self.nombre = nombre self.edad = edad
def saludar(self): return f"Soy {self.nombre}"
def __str__(self): # representación en texto return f"Persona({self.nombre})"
p = Persona("Ana", 30)p.saludar()Herencia
Section titled “Herencia”class Empleado(Persona): def __init__(self, nombre, edad, salario): super().__init__(nombre, edad) self.salario = salarioMétodos especiales útiles
Section titled “Métodos especiales útiles”__init__ # constructor__str__ # str(obj) / print__repr__ # representación técnica__len__ # len(obj)__eq__ # obj1 == obj2__lt__ # obj1 < obj2Propiedades y métodos de clase
Section titled “Propiedades y métodos de clase”class Circulo: def __init__(self, radio): self._radio = radio
@property def area(self): return 3.14 * self._radio ** 2
@staticmethod def descripcion(): return "Un círculo"
@classmethod def unitario(cls): return cls(1)Dataclasses (menos código)
Section titled “Dataclasses (menos código)”from dataclasses import dataclass
@dataclassclass Punto: x: int y: int = 0
p = Punto(3, 4) # __init__, __repr__, __eq__ automáticosFicheros
Section titled “Ficheros”Leer y escribir
Section titled “Leer y escribir”# Leer todowith open("archivo.txt", "r", encoding="utf-8") as f: contenido = f.read()
# Leer líneaswith open("archivo.txt") as f: for linea in f: print(linea.strip())
# Escribir (sobrescribe)with open("salida.txt", "w", encoding="utf-8") as f: f.write("hola\n")
# Añadir al finalwith open("salida.txt", "a") as f: f.write("más texto\n")import json
# Objeto Python -> string JSONjson.dumps(datos, indent=2, ensure_ascii=False)
# String JSON -> objeto Pythonjson.loads(texto)
# Leer/escribir fichero JSONwith open("datos.json") as f: datos = json.load(f)
with open("datos.json", "w") as f: json.dump(datos, f, indent=2)Módulos útiles de la librería estándar
Section titled “Módulos útiles de la librería estándar”datetime (fechas y horas)
Section titled “datetime (fechas y horas)”from datetime import datetime, date, timedelta
ahora = datetime.now()hoy = date.today()datetime.now().strftime("%Y-%m-%d %H:%M:%S")datetime.strptime("2026-07-08", "%Y-%m-%d")manana = hoy + timedelta(days=1)diferencia = (fecha1 - fecha2).daysos y pathlib (rutas y sistema)
Section titled “os y pathlib (rutas y sistema)”from pathlib import Path
p = Path("carpeta/archivo.txt")p.exists() # existep.name # "archivo.txt"p.suffix # ".txt"p.parent # "carpeta"p.stem # "archivo"list(Path(".").glob("*.py")) # busca ficheros
import osos.getenv("VARIABLE") # variable de entornoos.environ["PATH"]collections
Section titled “collections”from collections import Counter, defaultdict, deque
Counter([1,1,2,3,3,3]) # {3:3, 1:2, 2:1}Counter(texto).most_common(3) # top 3
d = defaultdict(list) # dict con valor por defectod["clave"].append(1) # no falla si no existe
cola = deque([1,2,3]) # cola de doble extremocola.appendleft(0)cola.popleft()itertools
Section titled “itertools”from itertools import chain, combinations, product, groupby
list(chain([1,2], [3,4])) # [1,2,3,4]list(combinations([1,2,3], 2)) # pareslist(product([1,2], [3,4])) # producto cartesianorandom
Section titled “random”import random
random.randint(1, 10) # entero aleatorio (ambos incluidos)random.choice(lista) # elemento aleatoriorandom.shuffle(lista) # baraja in-placerandom.sample(lista, 3) # 3 sin repetirrandom.random() # float entre 0 y 1import math
math.sqrt(16) # 4.0math.ceil(3.2) # 4math.floor(3.8) # 3math.pi # 3.14159...math.pow(2, 10) # 1024.0abs(-5) # 5 (builtin, sin import)round(3.567, 2) # 3.57 (builtin)Comprehensions y funcionales
Section titled “Comprehensions y funcionales”map, filter, reduce
Section titled “map, filter, reduce”list(map(lambda x: x*2, lista))list(filter(lambda x: x > 0, lista))
from functools import reducereduce(lambda a, b: a + b, lista) # suma acumuladaGeneradores
Section titled “Generadores”def contador(n): for i in range(n): yield i # genera bajo demanda
gen = (x**2 for x in range(10)) # generator expressionnext(gen)Entornos virtuales y pip
Section titled “Entornos virtuales y pip”python -m venv .venv # crear entornosource .venv/bin/activate # activar (Linux/Mac).venv\Scripts\activate # activar (Windows)deactivate # desactivarpip install paquetepip install paquete==1.2.3 # versión específicapip install -r requirements.txt # desde ficheropip freeze > requirements.txt # exportar dependenciaspip list # listar instaladospip uninstall paqueteTrucos y atajos útiles
Section titled “Trucos y atajos útiles”Desempaquetado y intercambio
Section titled “Desempaquetado y intercambio”a, b = b, a # intercambiar variablesprimero, *resto = lista # desempaquetado extendido{**d1, **d2} # fusionar diccionarios[*lista1, *lista2] # fusionar listasOperadores útiles
Section titled “Operadores útiles”x = valor or "por defecto" # si valor es falsyx = a if cond else b # ternariolista = lista or [] # evita Noneresultado = d.get(k) or defectoWalrus operator (:=) Python 3.8+
Section titled “Walrus operator (:=) Python 3.8+”if (n := len(lista)) > 10: print(f"Larga: {n}")
while (linea := f.readline()): procesar(linea)Enumerar con índice inicial
Section titled “Enumerar con índice inicial”for i, x in enumerate(lista, start=1): print(i, x) # empieza en 1Comandos rápidos en terminal
Section titled “Comandos rápidos en terminal”python script.py # ejecutar scriptpython -m modulo # ejecutar módulopython -c "print('hola')" # ejecutar código directopython -i script.py # ejecutar y quedarse en consolapython -m http.server 8000 # servidor web rápidopython -m json.tool f.json # formatear JSON