Pretty-Print: Imprimiento de forma «bonita» datos complejos en python

Hoy en el trabajo, tenía que cargar a mano un diccionario de Python que, en su forma canónica, ocupaba un churro de 7000 caracteres, que se dice pronto.

Buscando cosas que no tenían nada que ver, descubro el módulo pprint que seguro que, a la hora de depurar, os resuelve la vida a más de uno. Se trata de un módulo que aúna funcionalidad para representar tipos de datos arbitrariamente complejos de manera «bonita» (el módulo se llama pretty-print).

La funcionalidad más básica la proporciona la función pprint() del módulo. La función toma los siguientes parámetros:

  • object, el objeto que quieres imprimir.
  • stream, opcional, dónde lo quieres imprimir. Por defecto en la salida estándar.
  • indent, opcional, cuántas sangrías (indentaciones) por nivel. Por defecto 1.
  • depth, opcional, nivel máximo a partir del cual los objetos más profundos se reemplazan por ‘…’. Por defecto, desactivado.
  • width, opcional, anchura máxima antes de romper una línea. Por defecto 80.

Os dejo una comparación para que veais a qué me refiero:

import pprint

a = {'nombre completo':{'nombre':'Salvador', 'apellidos':'de la Puente'}, 'edad':25, 'puestos':[('programador .NET',2006),('administrador de sistemas', 2008),('investigador', 2010)]}
print a
pprint.pprint(a)

Y su salida:

>>> print a
{'edad': 25, 'nombre completo': {'apellidos': 'de la Puente', 'nombre': 'Salvador'}, 'puestos': [('programador .NET', 2006), ('administrador de sistemas', 2008), ('investigador', 2010)]}
>>> pprint.pprint(a)
{'edad': 25,
 'nombre completo': {'apellidos': 'de la Puente', 'nombre': 'Salvador'},
 'puestos': [('programador .NET', 2006),
             ('administrador de sistemas', 2008),
             ('investigador', 2010)]}

¿Veis qué útil?

Un truquillo para comentar en C

A veces necesitamos activar y desactivar un cachito de código y aunque existen soluciones muy elegantes, en ocasiones nos conformamos con comentar esas líneas que queremos desactivar. Una forma de hacerlo rápido es mediante el siguiente atajo:

Todos sabemos que en C/C++ tenemos dos tipos de comentarios, los comentarios de línea…

// Esto es un comentario de línea

y los comentarios de bloque…

/* Esto es un comentario de bloque
que no termina hasta que encuentra
la siguiente combinación de símbolos
*/

Para activar/desactivar un bloque de código como este:

int i;
for (i=0; i<10; i++){
printf("Fuuuuuu!\n");
}

Basta con añadir al final de la línea 4, justo tras la llave de cierre, el siguiente comentario:

// */

Ahora, cuando queramos desactivar el fragmento de código escribiremos antes del mísmo la apertura del comentario de bloque:

/*
int i;
for (i=0; i<10; i++){
printf("Fuuuuuu!\n");
} // */

Y cuando queramos activar el fragmento, borraremos la marca:


int i;
for (i=0; i<10; i++){
printf("Fuuuuuu!\n");
} // */

También es bastante útil en depuración cuando, tras comentar una región conflictiva, vamos descomentando partes de la región para encontrar la sentencia que produce el error.