Formato de salida

Normalmente, cuando escribimos los resultados de un proceso, mezclamos datos, texto y más datos. No siempre es cómodo hacerlo. Por ejemplo, aprovechando que print separa con un espacio varios datos que le pasemos con comas, podemos hacer lo siguiente:
nombre = 'Juan'
apellido1 = 'Moto'
apellido2 = 'Caled'
 
print 'Su nombre es', nombre, 'y sus apellidos', apellido1, 'y', apellido2
El resultado (la salida) es la siguiente:
Su nombre es Juan y sus apellidos Moto y Caled
 
Pero, ¿y si no queremos que halla un espacio entre los datos? Por ejemplo, para añadir un punto al final de la frase anterior, no nos basta con añadir en el código, separado por una coma, '.' ya que dicho punto quedaría separado de la última palabra.
print 'Su nombre es', nombre, 'y sus apellidos', apellido1, 'y', apellido2,'.'
 
........
 
Su nombre es Juan y sus apellidos Moto y Caled .
 
Podemos solucionarlo concatenando cadenas, de la siguiente manera:
print 'Su nombre es ' + nombre +  ' y sus apellidos ' + apellido1 + ' y ' + apellido2 + '.'
 
........
 
Su nombre es Juan y sus apellidos Moto y Caled.
 
Pero es evidente que es algo incómodo, pues hay que tener en cuenta que hay que dejar espacios extras para que las variables no queden pegadas al texto. Además, ¿y si nombre o apellido1 o apellido2 no fueran cadenas de texto, si no números u otro tipo de dato? Esta aproximación sería imposible.
Una forma de atacar este problema, la que llamaríamos ahora forma antigua, es utilizar el operador de formato % con cadenas de texto. Observa los siguientes ejemplos:
import math
print 'El valor de PI es aproximadamente %5.3f.' % math.pi
print 'Hola %s, estoy cansado.' % 'Pedro'
 
........
 
El valor de PI es aproximadamente 3.142.
'Hola Pedro, estoy cansado.'
Como puedes ver el operador % hace que los valores de las variables que se indican se inserten en las posiciones de la cadena también indicadas. ¿Dónde exactamente? Las cadenas de texto se insertan donde indica el %s, los decimales con %f (el que sea %5.3f quiere decir que ocupa 5 espacios y 3 son decimales, es decir, 3.142)...
Actualmente, se prefiere utilizar el método format de los datos tipo string. Como ejemplo, veamos cómo se haría lo anterior de la nueva forma:
import math
print 'El valor de PI es aproximadamente {0:.3f}.'.format(math.pi)
print 'Hola {0}, estoy cansado.'.format('Pedro')
 
........
 
El valor de PI es aproximadamente 3.142.
'Hola Pedro, estoy cansado.'
Los diferentes valores que se incrustan en el texto se indican con {0}, {1}, {2},... y si se quiere aplicar opciones especiales, se escriben dos puntos seguido de ellas, como en {0:.3f}, que indica que se escribe un float con 3 decimales.