El %s
especificador convierte el objeto utilizando str()
, y %r
la convierte usando repr()
.
Para algunos objetos tales como números enteros, producen el mismo resultado, pero repr()
es especial en que (para tipos de que esto sea posible) que convencionalmente devuelve un resultado que es sintaxis Python válida, que podría ser utilizado para volver a crear de forma inequívoca la objeto que representa.
He aquí un ejemplo, usando una fecha:
>>> import datetime
>>> d = datetime.date.today()
>>> str(d)
'2011-05-14'
>>> repr(d)
'datetime.date(2011, 5, 14)'
tipos para los que repr()
no produce sintaxis de Python incluyen aquellas que hacen referencia a los recursos externos tales como un file
, que no se puede garantizar a recrear en un contexto diferente.
Me encanta este ejemplo, porque muestra una gran diferencia entre% s y% r ... la mayoría de los ejemplos solo muestran algo como 'apple' vs. apple, y luego no está claro por qué incluso tenemos% r. – macloo
¿Cómo se implementaría el% especificador en Python 3.3? También estoy siguiendo la secuencia Learn Python the Hard Way, pero he descubierto que hay varias diferencias de sintaxis entre las versiones de Python. – nitrl
Gracias. Me preguntaba por qué uno podría usar el% r, pero ahora entiendo por su ejemplo anterior. –