PythonAprende PythonDocumentación

Buenas prácticas y PEP 8

Estilo, docstrings, estructura y el Zen de Python.

El código se escribe una vez y se lee cientos. PEP 8 es la guía de estilo de Python — y detrás de cada regla hay una razón de legibilidad. Este es el resumen profesional.

Nombres: cada cosa con su formato

# snake_case: funciones y variables
def calcular_promedio(): ...
total_productos = 10

# PascalCase: clases
class UsuarioPremium: ...

# MAYUSCULAS: constantes (que no deberían cambiar)
TASA_IVA = 0.19
MAXIMO_INTENTOS = 3

# _prefijo: uso interno, "no toques esto desde afuera"
_cache_interno = {}

El Zen de Python

Ejecuta import this en cualquier intérprete. Los aforismos que más importan:

  • Readability counts — la legibilidad cuenta
  • Explicit is better than implicit — explícito mejor que implícito
  • Simple is better than complex — simple mejor que complejo
  • There should be one obvious way to do it — debe haber una forma obvia

No son poemas: son criterios de decisión. Ante dos soluciones, gana la más legible.

Docstrings: documentación viva

Un docstring va en la primera línea del módulo, clase o función, entre triple comilla:

def calcular_cuota(capital, tasa_anual, meses):
    """Calcula la cuota mensual de un préstamo de pago fijo."""
    ...
  • Una línea si basta: qué hace (no cómo)
  • Para APIs públicas, el formato de parámetros y retorno
  • Se accede con help(funcion) y funcion.__doc__ — vive con el código, a diferencia del wiki

La diferencia con un comentario #: el docstring documenta el contrato (qué promete); los comentarios explican el porqué de decisiones no obvias.

Formato que PEP 8 exige

# Espacios alrededor de operadores, después de comas
total = precio * cantidad
coordenadas = (10, 20, 30)

# Líneas de máximo 79-99 caracteres (elige y sé consistente)

# Dos líneas en blanco antes de una definición de nivel superior


def nivel_superior(): ...

# Comparaciones con None: usar is
if resultado is None:      # nunca == None
    ...

# No compares con True/False explícitamente
if esta_activo:            # no: if esta_activo == True:
    ...

Y deja que las herramientas hagan el trabajo sucio: ruff (linter + formatter ultrarrápido) o black (formatter). El formateo automático no se discute — se configura y se olvida.

Anti-patrones que delatan código amateur

# 1. Excepciones tragadas
try:
    procesar()
except:            # ¿qué falló? ¿por qué? ¿importa?
    pass

# 2. Variables de una letra (fuera de índices matemáticos)
for e in elementos: ...      # ¿e de qué? → elemento

# 3. Números mágicos sin contexto
if edad > 18: ...            # → EDAD_ADULTO = 18

# 4. Funciones de 200 líneas que hacen todo
# → divide: una función, una responsabilidad

# 5. Código muerto comentado
# viejo_codijo_x()   ← bórralo: para eso está git

Estructura de proyecto saludable

  • Una responsabilidad por módulo — el nombre del archivo debe decir qué hay adentro
  • Funciones cortas (menos de una pantalla): más fáciles de testear y entender
  • Constantes arriba, sin valores mágicos esparcidos
  • main() como punto de entrada con if __name__ == "__main__": para scripts

Resumen

  • snake_case / PascalCase / MAYUSCULAS — cada nombre con su formato
  • Docstrings documentan contratos; comentarios explican porqués
  • is None, sin == True, líneas cortas — deja que ruff/black lo impongan
  • Excepciones específicas, nombres descriptivos, cero números mágicos
  • El Zen de Python como criterio: ante la duda, gana lo más legible

Quiz

  1. 1. Según PEP 8, ¿cómo se nombran funciones y variables?

  2. 2. ¿Qué es un docstring?

  3. 3. ¿Qué dice el Zen de Python (import this) sobre la legibilidad?

Ejercicios

Ejercicio 1: Refactoriza al estilo PEP 8

El código tiene nombres pésimos. Refactoriza la función para que use snake_case, docstring y nombres descriptivos, e imprime el mismo resultado.

Cargando editor…

Ejercicio 2: Docstring profesional

Escribe `calcular_area(base, altura)` con un docstring de una línea que describa qué devuelve. El validador comprueba __doc__ y el resultado.

Cargando editor…