machine - Python, el camino difícil: ejercicio 6-% r versus% s
r vs python 2018 (7)
http://learnpythonthehardway.org/book/ex6.html
Zed parece usar %r
y %s
indistintamente aquí, ¿hay alguna diferencia entre los dos? ¿Por qué no solo usas %s
todo el tiempo?
Además, no estaba seguro de qué buscar en la documentación para encontrar más información sobre esto. ¿Qué son %r
y %s
llamados exactamente? ¿Formateo de cadenas?
El código a continuación ilustra la diferencia. El mismo valor se imprime de manera diferente:
x = "xxx"
withR = "prints with quotes %r"
withS = "prints without quotes %s"
El siguiente es un resumen de los tres ejemplos de código anteriores.
# First Example
s = ''spam''
# "repr" returns a printable representation of an object,
# which means the quote marks will also be printed.
print(repr(s))
# ''spam''
# "str" returns a nicely printable representation of an
# object, which means the quote marks are not included.
print(str(s))
# spam
# Second Example.
x = "example"
print ("My %r" %x)
# My ''example''
# Note that the original double quotes now appear as single quotes.
print ("My %s" %x)
# My example
# Third Example.
x = ''xxx''
withR = ("Prints with quotes: %r" %x)
withS = ("Prints without quotes: %s" %x)
print(withR)
# Prints with quotes: ''xxx''
print(withS)
# Prints without quotes: xxx
Se llaman operaciones de formateo de cadenas .
La diferencia entre% sy% r es que% s usa la función str
y% r usa la función repr
. Puede leer sobre las diferencias entre str
y repr
en esta respuesta , pero para los tipos incorporados, la mayor diferencia en la práctica es que repr
para cadenas incluye comillas y se escapan todos los caracteres especiales.
%r
llama a repr
, mientras que %s
llama a str
. Estos pueden comportarse de manera diferente para algunos tipos, pero no para otros: repr
devuelve "una representación imprimible de un objeto", mientras que str
devuelve "una representación muy imprimible de un objeto". Por ejemplo, son diferentes para cadenas:
>>> s = "spam"
>>> print(repr(s))
''spam''
>>> print(str(s))
spam
En este caso, la repr
es la representación literal de una cadena (que el intérprete de Python puede analizar en un objeto str
), mientras que la str
es solo el contenido de la cadena.
%s
=> cadena
%r
=> exactamente como es
Usando el código en el libro:
my_name = ''Zed A. Shaw''
print "Let''s talk about %s." % my_name
print "Let''s talk about %r." % my_name
obtenemos
Let''s talk about Zed A. Shaw.
Let''s talk about ''Zed A. Shaw''.
%s
invoca str , mientras que %r
invoca repr . Para más detalles, vea Diferencia entre __str__ y __repr__ en Python
x = "example"
print "My %s"%x
My example
print "My %r"%x
My ''example''
Está bien explicado en las respuestas anteriores. Intenté mostrar lo mismo con un simple ejemplo.