PEP 8 en Python: estilo, nombres y formato

Actualizado el: 21/08/2026
Tempo de leitura: 4 minutos
Logo do Python com o texto 'PEP 8' sobre fundo azul escuro, representando o guia de estilo da linguagem

PEP 8 en Python es la guía de estilo más conocida del lenguaje. Su objetivo no es cambiar lo que hace un programa, sino facilitar que otras personas —y tu yo del futuro— comprendan el código. Las convenciones cubren nombres, sangría, espacios, imports, longitud de líneas, funciones, clases y organización general.

La fuente principal es la PEP 8 oficial. No todas sus recomendaciones son reglas absolutas: la coherencia del proyecto y la legibilidad tienen prioridad cuando existe una razón clara.

Sangría de cuatro espacios

def calcular_total(precios):
    total = 0.0

    for precio in precios:
        total += precio

    return total

Python utiliza la sangría como parte de la sintaxis. Configura el editor para insertar cuatro espacios y evita mezclar tabulaciones con espacios.

Nombres claros

  • Funciones y variables: snake_case.
  • Clases: CapWords o PascalCase.
  • Constantes: MAYUSCULAS_CON_GUIONES.
  • Módulos: nombres cortos en minúsculas.
MAX_INTENTOS = 3

class GestorUsuarios:
    def buscar_usuario(self, usuario_id):
        ...

Los nombres deben explicar la intención. Evita abreviaturas ambiguas como x1, tmp2 o data_final_final.

Espacios alrededor de operadores

# Recomendado
subtotal = cantidad * precio
total = subtotal + impuesto

# Difícil de leer
subtotal=cantidad*precio

No añadas espacios inmediatamente dentro de paréntesis, corchetes o llaves.

Imports organizados

import json
from pathlib import Path

import pandas as pd

from mi_proyecto.configuracion import cargar_configuracion

Separa imports de la biblioteca estándar, dependencias externas y módulos locales. Normalmente cada import ocupa su propia línea.

Evitar imports con asterisco

# Evita
from modulo import *

# Mejor
from modulo import funcion_a, funcion_b

Los imports explícitos muestran de dónde viene cada nombre y reducen colisiones.

Longitud de líneas

PEP 8 recomienda líneas moderadas. Cuando una expresión crece, divide dentro de paréntesis:

resultado = procesar_datos(
    origen=ruta_origen,
    destino=ruta_destino,
    validar=True,
    sobrescribir=False,
)

Evita barras invertidas para continuar líneas cuando los paréntesis ofrecen una alternativa más clara.

Líneas en blanco

Las líneas en blanco separan ideas. Usa dos entre definiciones de nivel superior y una entre métodos o bloques lógicos dentro de una función, sin fragmentar excesivamente el código.

Comparaciones con None y booleanos

if resultado is None:
    print("Sin resultado")

if usuario_activo:
    print("Usuario activo")

Usa is None en lugar de == None. Para booleanos, normalmente no necesitas comparar con True. La guía de None en Python y la de booleanos en Python amplían estas prácticas.

Funciones pequeñas y enfocadas

def calcular_subtotal(cantidad, precio):
    return cantidad * precio


def aplicar_descuento(subtotal, porcentaje):
    return subtotal * (1 - porcentaje)

Una función con una responsabilidad clara es más fácil de nombrar, probar y documentar. Consulta la guía de funciones en Python.

Comentarios que expliquen el motivo

# El proveedor limita cada solicitud a 100 registros.
TAMANO_LOTE = 100

Un comentario útil explica una decisión, una limitación o un contexto que el código no puede expresar por sí solo. No repitas literalmente cada línea. La guía de comentarios en Python muestra ejemplos.

Docstrings para interfaces públicas

def calcular_promedio(valores):
    """Devuelve el promedio de una secuencia no vacía."""
    return sum(valores) / len(valores)

Los docstrings documentan módulos, clases, funciones y métodos. La guía de docstrings en Python explica formatos y herramientas.

Excepciones específicas

try:
    edad = int(texto)
except ValueError:
    print("La edad debe ser un número entero")

Evita except: sin tipo, porque también captura eventos que normalmente deben propagarse. La guía de try y except explica cómo manejar errores con precisión.

Refactorización práctica

Código difícil de leer:

def f(x,y,z=False):
    r=[]
    for i in x:
        if i>y and not z:r.append(i*2)
    return r

Versión más clara:

def duplicar_mayores(
    valores,
    limite,
    omitir_resultados=False,
):
    resultados = []

    for valor in valores:
        if valor > limite and not omitir_resultados:
            resultados.append(valor * 2)

    return resultados

La segunda versión ocupa más líneas, pero comunica nombres, condiciones y estructura.

Automatizar comprobaciones

Los linters detectan problemas de estilo, imports no utilizados y errores comunes. Ruff reúne comprobaciones y correcciones rápidas; su documentación oficial explica instalación y configuración.

python -m pip install ruff
ruff check .
ruff format .

Guarda la configuración en pyproject.toml para que todo el equipo utilice las mismas reglas.

PEP 8 y formatters

Un formatter resuelve automáticamente decisiones mecánicas, pero no elige buenos nombres ni divide responsabilidades. Combina formato automático, linting, pruebas y revisión humana.

Cuándo apartarse de la guía

  • Compatibilidad con una API pública existente.
  • Convenciones establecidas por un framework.
  • Código generado automáticamente.
  • Expresiones matemáticas o tablas donde otra disposición mejora la lectura.

Documenta la decisión y mantén consistencia local.

Lista de revisión

  • ¿Los nombres expresan la intención?
  • ¿La sangría es consistente?
  • ¿Los imports están organizados?
  • ¿Las funciones tienen responsabilidades pequeñas?
  • ¿Los comentarios explican motivos?
  • ¿Las excepciones son específicas?
  • ¿El linter y el formatter usan una configuración compartida?

Conclusión

PEP 8 en Python proporciona un vocabulario común para escribir código legible. No se trata de obedecer una lista de reglas de forma ciega, sino de reducir sorpresas y facilitar el mantenimiento. Automatiza el formato, utiliza un linter y dedica la revisión humana a nombres, diseño y claridad.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Configuración TOML en un proyecto Python
    Buenas Prácticas
    Foto de perfil de Leandro Hirt da Academify

    tomllib en Python: lee archivos TOML

    Aprende a leer TOML con tomllib en Python, validar configuraciones, gestionar errores y organizar proyectos con pyproject.toml.

    Ler mais

    Tempo de leitura: 6 minutos
    24/07/2026
    Desarrollador monitoreando registros estructurados en Python
    Buenas Prácticas
    Foto de perfil de Leandro Hirt da Academify

    Observabilidad en Python con structlog

    Aprende observabilidad en Python con structlog, eventos JSON, contexto, pruebas, control de volumen y recomendaciones para producción.

    Ler mais

    Tempo de leitura: 5 minutos
    24/07/2026
    Configuración segura de aplicaciones Python con Pydantic Settings
    Buenas Prácticas
    Foto de perfil de Leandro Hirt da Academify

    Pydantic Settings: configuración segura

    Aprende a validar variables de entorno, organizar configuraciones y proteger secretos en proyectos Python con Pydantic Settings.

    Ler mais

    Tempo de leitura: 5 minutos
    23/07/2026
    Desenvolvedor programando em Python com Ruff para lint e formatação
    Buenas Prácticas
    Foto de perfil de Leandro Hirt da Academify

    Ruff: lint y formato de código Python

    Aprende Ruff en Python para lint, formato, correcciones automáticas, pyproject.toml, VS Code y CI con una configuración práctica.

    Ler mais

    Tempo de leitura: 10 minutos
    22/07/2026
    Dicas para melhorar performance de scripts Python lentos
    Buenas Prácticas
    Foto de perfil de Leandro Hirt da Academify

    ¿Por qué Python es lento? Causas y optimización

    Descubre por qué Python puede ser lento y mejora su rendimiento con cProfile, algoritmos, sets, generadores, NumPy, caché y concurrencia.

    Ler mais

    Tempo de leitura: 5 minutos
    12/07/2026
    Leitura segura de senhas no terminal usando Python
    Buenas Prácticas
    Foto de perfil de Leandro Hirt da Academify

    getpass: lee contraseñas en terminal con Python

    Lee contraseñas de forma segura con getpass, valida entradas, evita logs y texto plano y almacena credenciales con hashing adecuado.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026