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.
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.
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)
¿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 |
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")
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:
- Indentación: 4 espacios por nivel
- Largo de línea: máximo 79-120 caracteres
- Espacios alrededor de operadores:
x = 1, nox=1 - Líneas en blanco: 2 entre funciones de nivel superior, 1 entre métodos dentro de una clase
- Imports: uno por línea, al inicio del archivo, agrupados (stdlib → terceros → locales)
- Trailing whitespace: no dejar espacios al final de las líneas
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.
Ejemplos explicados paso a paso
Ejemplo 1: Tipos de comentarios
Tres formas de comentar en Python: inline, de línea completa, y docstrings.
Hacé clic en ▶ Ejecutar
Ejemplo 2: Buenos vs malos comentarios
Compará comentarios que ayudan con comentarios que molestan.
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.
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.
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.
Hacé clic en ▶ Ejecutar
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 |
Ejercicios
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
Ejercicio 3: Arreglar indentación rota
Este código tiene la indentación mal. Arreglalo para que funcione. Debe incluir Saldo: positivo.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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:.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
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.
Hacé clic en ▶ Ejecutar
Resumen y conexión
- Comentarios (
#) explican el POR QUÉ, no el QUÉ. Docstrings ("""...""") documentan funciones. - La indentación (4 espacios) es obligatoria en Python — define la estructura del programa.
- PEP 8 es la guía de estilo oficial: snake_case, espacios en operadores, imports separados, 79-120 chars por línea.
- Código comentado (desactivado) debe borrarse — para eso existe Git.
- Los buenos nombres hacen que el código se explique solo. Los comentarios son para el contexto y las decisiones.
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