QuieroProgramar por Rodri Gonzalez
Python · Lección 07 de 27

Comentarios e indentación

El código se escribe una vez y se lee cientos de veces. Comentar bien e indentar correctamente es lo que convierte código funcional en código profesional y mantenible.

50–70 min Prerrequisitos: 06 Condicionales
01

Concepto teórico

¿Para qué comentar?

Un comentario es texto que Python ignora al ejecutar. Existe exclusivamente para que los humanos (incluido tu yo del futuro) entiendan el código. Parece trivial, pero en el mundo profesional la diferencia entre un proyecto mantenible y uno que nadie quiere tocar suele ser la calidad de los comentarios.

Hay una frase famosa en programación: "El código dice CÓMO, los comentarios dicen POR QUÉ." No comentes lo obvio (# sumo a + b antes de c = a + b). Comentá las decisiones no evidentes: por qué usaste una fórmula y no otra, por qué tratás un caso especial, qué regla de negocio implementa ese bloque.

Regla de oro: si necesitás un comentario para explicar QUÉ hace tu código, probablemente tu código sea demasiado complejo o tenga nombres poco claros. Los buenos nombres hacen que el código se explique solo. Los comentarios quedan para el POR QUÉ y el CONTEXTO.

Tipos de comentarios en Python

Comentario de una línea: empieza con #. Todo lo que viene después del # en esa línea es ignorado por Python.

# Esto es un comentario completo en una línea
saldo = 50000  # También podés comentar al final de una línea de código

Docstrings (documentación): son strings de triple comilla ("""...""" o '''...''') que documentan funciones, clases y módulos. A diferencia de los comentarios comunes, los docstrings se almacenan en memoria y se pueden acceder con help() o .__doc__. Son la forma oficial de documentar en Python.

def calcular_iva(precio, tasa=0.21):
    """
    Calcula el precio con IVA incluido.
    
    Args:
        precio (float): Precio sin IVA.
        tasa (float): Tasa de IVA. Default: 0.21 (21%).
    
    Returns:
        float: Precio con IVA incluido.
    """
    return precio * (1 + tasa)
Tip profesional: el estilo de docstrings más usado en la industria es el de Google (como el ejemplo de arriba). Otras opciones son NumPy style y Sphinx style. Lo importante es ser consistente en todo el proyecto.

¿Qué comentar y qué NO comentar?

✅ Comentá esto ❌ NO comentes esto
Decisiones de diseño no obvias Código que se explica solo
Reglas de negocio: "BCRA exige ratio < 35%" # Sumo a más b antes de c = a + b
Workarounds y sus razones Cada línea individual
TODOs y FIXMEs para el futuro Código comentado que "por las dudas" dejás
Fórmulas financieras con su fuente Nombres de variables (si el nombre es bueno)
Límites y supuestos del algoritmo Getters y setters triviales
Antipatrón: código comentado. Si tenés líneas de código comentadas "por las dudas", borralas. Para eso existe Git (control de versiones) — siempre podés recuperar código viejo. Código comentado acumula ruido, confunde, y nadie sabe si está ahí por algo o es basura.

Indentación: la estructura de Python

En la mayoría de lenguajes (Java, C++, JavaScript), los bloques de código se delimitan con llaves {}. En Python, los bloques se delimitan con indentación (espacios al inicio de la línea). Esto NO es una preferencia estética — es parte de la sintaxis del lenguaje. Si indentás mal, tu programa hace otra cosa o directamente da error.

La convención universal es usar 4 espacios por nivel de indentación. No 2, no 3, no tabs — 4 espacios. Esto está documentado en PEP 8 y es lo que usan el 99% de los proyectos Python del mundo.

if saldo > 0:
    # Nivel 1: 4 espacios
    print("Tenés saldo positivo")
    if saldo > 100000:
        # Nivel 2: 8 espacios
        print("Saldo alto")
        if saldo > 1000000:
            # Nivel 3: 12 espacios
            print("Sos millonario")
# Nivel 0: sin espacios — fuera de todos los bloques
print("Esto siempre se ejecuta")
IndentationError: el error más frustrante de principiante. Aparece cuando la indentación es inconsistente: mezclás tabs y espacios, o tenés 3 espacios donde deberían ser 4. VS Code con la extensión de Python resuelve esto automáticamente convirtiendo tabs a 4 espacios.

PEP 8: el estándar de estilo de Python

PEP 8 (Python Enhancement Proposal #8) es la guía oficial de estilo de Python. Seguirla no es obligatorio para que tu código funcione, pero sí es obligatorio en cualquier equipo profesional. Las reglas más importantes:

En el trabajo real: los equipos profesionales usan herramientas automáticas para forzar PEP 8: black (formateador automático), flake8 o pylint (verificadores de estilo), y los configuran en CI/CD para que el código que no cumple ni siquiera se pueda mergear. Aprender PEP 8 ahora te ahorra conflictos después.
02

Ejemplos explicados paso a paso

Ejemplo 1: Tipos de comentarios

Tres formas de comentar en Python: inline, de línea completa, y docstrings.

ejemplo_01_comentarios.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: Buenos vs malos comentarios

Compará comentarios que ayudan con comentarios que molestan.

ejemplo_02_buenos_malos.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: La indentación como estructura

Moviendo una sola línea de lugar (cambiando su indentación) cambia completamente el comportamiento del programa.

ejemplo_03_indentacion.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 4: Desactivar código temporalmente con comentarios

Un uso legítimo de comentarios: desactivar líneas durante debugging. Pero no lo dejes así para siempre.

ejemplo_04_debug.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 5: Código PEP 8 compliant vs no compliant

Las dos versiones funcionan igual, pero una es profesional y la otra no.

ejemplo_05_pep8.pyPython

        
Hacé clic en ▶ Ejecutar
03

Referencia rápida

Elemento Sintaxis Uso
Comentario inline codigo # comentario Notas breves sobre una línea
Comentario de línea # comentario Explicar el bloque que sigue
Docstring """texto""" Documentar funciones/clases
TODO # TODO: tarea pendiente Marcar trabajo futuro
FIXME # FIXME: bug conocido Marcar problemas a resolver
HACK # HACK: workaround temporal Marcar soluciones temporales
Regla PEP 8 ✅ Correcto ❌ Incorrecto
Indentación 4 espacios Tabs, 2 espacios, mezcla
Espacios en operadores x = 1 + 2 x=1+2
Imports Uno por línea import os, sys, math
Largo de línea ≤ 79-120 chars Líneas de 200+ chars
Nombres snake_case camelCase, x
Líneas en blanco 2 entre funciones top-level 0 o 5 entre funciones
04

Ejercicios

Nivel 1 · Básico

Ejercicio 1: Agregar comentarios a código existente

Agregá un comentario a cada línea explicando qué hace (pero hacelo bien — explicá el POR QUÉ, no el QUÉ). El output debe incluir 6050.0.

ejercicio_01.pyDebe incluir "6050.0"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 2: Escribir un docstring

Agregá un docstring a la función calcular_neto que explique qué hace, qué parámetros recibe y qué devuelve. Debe incluir 684500.

ejercicio_02.pyDebe incluir "684500"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 3: Arreglar indentación rota

Este código tiene la indentación mal. Arreglalo para que funcione. Debe incluir Saldo: positivo.

ejercicio_03.pyDebe incluir "Saldo: positivo"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 4: Código con bloques anidados correctos

Escribí un programa con 3 niveles de indentación: un if que verifica edad >= 18, dentro otro if que verifica ingreso >= 100000, y dentro un print. Debe incluir Aprobado nivel 3.

ejercicio_04.pyDebe incluir "Aprobado nivel 3"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 5: Función documentada con docstring

Creá una función calcular_iva(precio, tasa=0.21) con docstring completo (descripción, Args, Returns). Usala e imprimí el resultado. Debe incluir 12100.

ejercicio_05.pyDebe incluir "12100"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 6: Identificar y corregir errores de estilo PEP 8

Este código viola PEP 8 en al menos 5 formas. Corregilo. Debe incluir Resultado: 30.

ejercicio_06.pyDebe incluir "Resultado: 30"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 7: Script profesional completo

Escribí un script con: encabezado comentado (autor, fecha, descripción), constantes, una función con docstring, y uso formateado. Debe incluir Autor:.

ejercicio_07.pyDebe incluir "Autor:"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 8: Pipeline comentado

Creá un mini pipeline que tome datos = ["$1,200", "N/A", "$800", "", "$2,500"], limpie los inválidos, convierta a números y sume. Comentá cada paso explicando POR QUÉ. Debe incluir 4500.

ejercicio_08.pyDebe incluir "4500"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 9: Acceder a docstrings

Creá 2 funciones con docstrings distintos. Usá .__doc__ para imprimir la documentación de cada una. Debe incluir Documentación.

ejercicio_09.pyDebe incluir "Documentación"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

Ejercicio 10: Refactoring completo — de código ilegible a profesional

Reescribí este código para que sea 100% PEP 8 compliant: nombres descriptivos, comentarios útiles, indentación correcta, docstrings. El output numérico debe ser el mismo. Debe incluir Neto: 655500.

ejercicio_10_desafio.pyDebe incluir "Neto: 655500"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

En la siguiente lección (08 · Listas) vas a aprender la primera estructura de datos de Python: colecciones ordenadas y modificables que te permiten guardar muchos valores bajo un solo nombre.

Recursos: PEP 8 · PEP 257 — Docstring Conventions