Python, conocido por su legibilidad y versatilidad, esconde algunas gemas que pueden llevar tu programación al siguiente nivel. En este artículo, te revelaré códigos secretos y funcionales que te ayudarán a escribir código más profesional, eficiente y, a veces, ¡simplemente más elegante!

1. Desempaquetado avanzado con *
y **
Más allá de desempaquetar iterables básicos, puedes usar *
y **
de formas sorprendentes:
Python
# Desempaquetado en funciones con argumentos variables
def imprimir_todo(primero, segundo, *resto):
print(f"Primero: {primero}")
print(f"Segundo: {segundo}")
print(f"Resto: {resto}")
imprimir_todo(1, 2, 3, 4, 5)
# Salida:
# Primero: 1
# Segundo: 2
# Resto: (3, 4, 5)
# Desempaquetado para fusionar iterables
lista1 = [1, 2, 3]
lista2 = [4, 5]
lista_fusionada = [*lista1, *lista2]
print(lista_fusionada) # [1, 2, 3, 4, 5]
diccionario1 = {'a': 1, 'b': 2}
diccionario2 = {'c': 3, 'd': 4}
diccionario_fusionado = {**diccionario1, **diccionario2}
print(diccionario_fusionado) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
2. Expresiones condicionales (Operador ternario conciso)
Una forma más legible de escribir if/else
en una sola línea:
Python
edad = 25
estado = "adulto" if edad >= 18 else "menor"
print(estado) # adulto
3. zip()
y desempaquetado para iteración paralela
Itera sobre múltiples iterables simultáneamente de forma elegante:
Python
nombres = ["Ana", "Beto", "Carla"]
edades = [30, 25, 35]
for nombre, edad in zip(nombres, edades):
print(f"{nombre} tiene {edad} años.")
# También puedes "descomprimir" con zip y *
pares = [(1, 'a'), (2, 'b'), (3, 'c')]
numeros, letras = zip(*pares)
print(numeros) # (1, 2, 3)
print(letras) # ('a', 'b', 'c')
4. enumerate()
para índices y elementos
Obtén el índice y el elemento al iterar sin necesidad de un contador manual:
Python
frutas = ["manzana", "banana", "cereza"]
for indice, fruta in enumerate(frutas):
print(f"Índice {indice}: {fruta}")
5. Comprensiones de listas, diccionarios y conjuntos (List, Dict, Set Comprehensions)
Formas concisas y eficientes de crear estas estructuras de datos:
Python
# Comprensión de lista para cuadrados
cuadrados = [x**2 for x in range(5)]
print(cuadrados) # [0, 1, 4, 9, 16]
# Comprensión de diccionario para invertir clave-valor
nombres_edades = {"Ana": 30, "Beto": 25}
edades_nombres = {edad: nombre for nombre, edad in nombres_edades.items()}
print(edades_nombres) # {30: 'Ana', 25: 'Beto'}
# Comprensión de conjunto para obtener elementos únicos
numeros = [1, 2, 2, 3, 3, 3]
unicos = {x for x in numeros}
print(unicos) # {1, 2, 3}
6. itertools
para iteraciones eficientes
El módulo itertools
ofrece funciones para crear iteradores eficientes para diversos propósitos, evitando la creación de listas intermedias grandes:
Python
import itertools
# `chain()` para iterar sobre múltiples iterables secuencialmente
lista1 = [1, 2]
lista2 = ['a', 'b']
for item in itertools.chain(lista1, lista2):
print(item) # 1, 2, a, b
# `cycle()` para iterar indefinidamente sobre un iterable
contador = 0
for color in itertools.cycle(['rojo', 'verde', 'azul']):
if contador >= 5:
break
print(color)
contador += 1
# `combinations()` para obtener combinaciones únicas
for combo in itertools.combinations([1, 2, 3], 2):
print(combo) # (1, 2), (1, 3), (2, 3)
7. functools.lru_cache
para memoización
Acelera funciones costosas almacenando en caché los resultados de llamadas anteriores con los mismos argumentos:
Python
import functools
import time
@functools.lru_cache(maxsize=None)
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
inicio = time.time()
print(fibonacci(30))
fin = time.time()
print(f"Tiempo sin caché: {fin - inicio:.4f} segundos")
inicio = time.time()
print(fibonacci(30)) # La segunda llamada es mucho más rápida
fin = time.time()
print(f"Tiempo con caché: {fin - inicio:.4f} segundos")
8. with
statement para gestión de recursos
Asegura que los recursos (como archivos) se gestionen correctamente, incluso si ocurren errores:
Python
with open("mi_archivo.txt", "r") as archivo:
contenido = archivo.read()
# No necesitas cerrar el archivo explícitamente
9. breakpoint()
para depuración interactiva (Python 3.7+)
Una forma más moderna y conveniente de iniciar el depurador:
Python
def mi_funcion(x):
y = x * 2
breakpoint() # Inicia el depurador aquí
z = y + 1
return z
resultado = mi_funcion(5)
print(resultado)
10. else
clauses en bucles for
y while
Ejecuta un bloque de código else
si el bucle se completa sin encontrar un break
:
Python
def buscar_numero(lista, numero):
for x in lista:
if x == numero:
print(f"{numero} encontrado en la lista.")
break
else:
print(f"{numero} no encontrado en la lista.")
buscar_numero([1, 2, 3, 4, 5], 3) # Salida: 3 encontrado en la lista.
buscar_numero([1, 2, 3, 4, 5], 6) # Salida: 6 no encontrado en la lista.
Revisa este video de resumen donde puedes ver algunas de las capacidades de Python
Conclusión
Python está lleno de herramientas y sintaxis ingeniosas que pueden hacer tu código más conciso, legible y eficiente. ¡Anímate a explorar estas «joyas ocultas» y eleva tu nivel de programación en Python! Visita nuestro canal de YouTube para ver más de Python y tkinter. Visita la documentación oficial de Python para conocer todas sus funciones. También visita nuestro blog de tecnología y aprende de otros lenguajes y sus trucos.