Está en la página 1de 11

4.4.

Mostrando
información
Python para la arquitectura y la ingeniería

Alberto Díaz, Edgar Talavera y Guillermo Iglesias


Curso 2022/2023
E.T.S.I. Sistemas Informáticos
License CC BY-NC-SA 4.0
print

Ya hemos visto que print saca por la salida estándar mensajes


Más correcto, saca la representación textual de uno o más elementos
Por defecto escribe en la salida estándar, pero se puede cambiar:

import sys
print('salida estándar (por defecto)', file=sys.stdout)
print('salida de error', file=sys.stderr)

Un detalle importante es que permite combinar parámetros de diferentes tipos


Para ello, se apoya en el método __str__ 1 de cada parámetro
1
En Python todo son objetos , y todos definen ese método; más adelante lo entenderemos mejor en el módulo
dedicado a la orientación a objetos
2 / 11
Cada elemento sacado por pantalla se separa con un espacio ( ' ' )

Se puede cambiar de separador con el parámetro sep :

>>> print('batman', 'batman', sep=' nananananananana ')


batman nananananananana batman

Por defecto escribe en una línea, finalizando con un retorno de carro.


Se puede cambiar el carácter de fin de línea con el parámetro end :

>>> print('nananananananana', end=' batman!\n')


nananananananana batman!

3 / 11
Formateo de la salida
¿Por qué formatear la salida? Porque las aplicaciones generan mucho texto
No solo aplicaciones en modo texto, que también
Aplicaciones web
Logs del sistema
En definitiva, cualquier aplicación que en algún momento saque texto

Las cadenas tienen dos formas principales de ser formateadas:


Mediante métodos orientados al padding ( rjust , ljust , center )
Mediante el método format

4 / 11
Métodos de padding

Justifican el texto a izquierda ( ljust ), derecha ( rjust ) o centro ( center )

Devuelve una nueva cadena


Lo sobrante lo rellenan con espacios
>>> 'batman'.rjust(22)
' batman'

O con caracteres de relleno si se especifica:


>>> 'batman'.rjust(22, 'na')
'nanananananananabatman'

zfill es como rjust pero con 0, y entiende de números negativos


5 / 11
Métodos de formateo ( format )

Las cadenas se pueden formatear con el método format(cadena, opciones)

Al igual que los métodos de padding devuelve una nueva cadena


Admite tantos parámetros como valores a formatear:
>>>'{} ¡{}!'.format('nananananananana', 'batman')
'nananananananana ¡batman!'

Se puede especificar su orden de aplicación:


>>>'{1} ¡{0}!'.format('nananananananana', 'batman')
'batman ¡nananananananana!'

Los parámetros se pueden nombrar para más legibilidad:


>>> 'Me llamo {pj}. Tú mataste a mi {kill}, prepárate a morir'.format(pj='Íñigo Montoya, kill='padre')
'Hola, me llamo Íñigo Montoya. Tú mataste a mi padre, prepárate a morir'
6 / 11
Los parámetros se pueden formatear con opciones tras el carácter : :

{:.[num]f} : Redondea hasta [num] decimales:

>>> '⅓ es más o menos {:.3f}'.format(1/3)


'⅓ es más o menos 0.333'

{:[num]} → Padding a la derecha (si es un número) o izquierda (en otro


caso) de hasta [num] espacios en blanco
>>> '{:22}'.format('batman')
'batman '
>>> '{:22}'.format(847040)
' 847040'

{:>[num]} → Padding a la derecha de hasta [num] espacios en blanco

{:^[num]} → Centra rellenando con [num] blancos a ambos lados


7 / 11
Nota histórica
Antes de format , las cadenas se formateaban con una sintaxis más liosa
>>> n = 5
>>> item = 'café con leche'
>>> 'Me ponga %d de %s' % n % item

Esta sintaxis tiene ciertos problemas:


Hay que especificar el tipo de cada variable: %d es un int , %s cadena, ...
Según crece el número de parámetros, el código se vuelve bastante ilegible
Existen errores; por ejemplo, no formatea correctamente tuplas o diccionarios

Viene bien conocerlo (que no usarlo) porque aún existe en muchos fuentes
8 / 11
f-strings
Hemos visto cómo formatear cadenas con el método format

Pero con muchos parámetros y cadenas largas, el código sigue siendo ilegible

Las f-string (formatted string literals) surgen como nueva alternativa

Definidas en el PEP 4981, se introdujeron a partir de Python 3.6


Se mantiene la sintaxis que con format , pero menos verbose:
>>> pj = 'Íñigo Montoya'
>>> kill = 'padre'
>>> f'Me llamo {pj}. Tú mataste a mi {kill}, prepárate a morir'
'Hola, me llamo Íñigo Montoya. Tú mataste a mi padre, prepárate a morir'

1 https://peps.python.org/pep-0498
9 / 11
Toda f-string debe comenzar con una f antes del la cadena

Con ello el intérprete entiende que no es un literal y que hay que evaluarla
>>> pj = 'Íñigo Montoya'
>>> kill = 'padre'
>>> 'Me llamo {pj}. Tú mataste a mi {kill}, prepárate a morir'
'Me llamo {pj}. Tú mataste a mi {kill}, prepárate a morir'
>>> f'Me llamo {pj}. Tú mataste a mi {kill}, prepárate a morir'
'Hola, me llamo Íñigo Montoya. Tú mataste a mi padre, prepárate a morir'

Esta evaluación implica también resolver las expresiones


>>> f'Tengo {1 + 1 + 1 + 1 + 1} dedos'
Tengo 5 dedos

En sus primeras implementaciones, el rendimiento se vio resentido


Hoy en día son más rápidas que format y que el antiguo formateo con %
10 / 11
¡GRACIAS!

También podría gustarte