cuál es el significado de %r
en la siguiente declaración?¿Cuál es el significado de% r en python
print '%r' % (1)
Creo que he oído hablar de %s
, %d
y %f
pero nunca oído hablar de esto.
cuál es el significado de %r
en la siguiente declaración?¿Cuál es el significado de% r en python
print '%r' % (1)
Creo que he oído hablar de %s
, %d
y %f
pero nunca oído hablar de esto.
Antecedentes:
En Python, hay dos funciones incorporadas para convertir un objeto en una cadena: str
vs repr
. str
se supone que es una cadena amigable, legible para los humanos. repr
se supone que incluye información detallada sobre el contenido de un objeto (a veces, devolverá lo mismo, como para enteros). Por convención, si hay una expresión de Python que evaluará a otro objeto que sea ==, repr
devolverá dicha expresión, p.
>>> print repr('hi') 'hi' # notice the quotes here as opposed to... >>> print str('hi') hi
Si devolver una expresión que no tiene sentido para un objeto, repr
debe devolver una cadena que está rodeado por < y> símbolos, por ejemplo, <blah>
.
Para responder a su pregunta original:
Además:
Se puede controlar la forma en que una instancia de sus propias clases convertir a cadenas implementando los métodos __str__
y __repr__
.
class Foo:
def __init__(self, foo):
self.foo = foo
def __eq__(self, other):
"""Implements ==."""
return self.foo == other.foo
def __repr__(self):
# if you eval the return value of this function,
# you'll get another Foo instance that's == to self
return "Foo(%r)" % self.foo
Llama al repr()
en el objeto e inserta la cadena resultante.
Imprime el reemplazo como una cadena con repr()
.
Consulte String Formatting Operations en los documentos. Tenga en cuenta que% sy% d, etc. pueden funcionar de manera diferente a como espera si está acostumbrado a la forma en que trabaja en otro idioma, como C.
En particular,% s también funciona bien para ints y flotantes a menos que tienen requisitos especiales de formato donde% d o% f le dará más control.
adición a las respuestas dadas anteriormente, '%r'
puede ser útil en un escenario en el que usted tiene una lista con el tipo de datos heterogéneos. Digamos que tenemos list = [1, 'apple' , 2 , 'r','banana']
Obviamente, en este caso, usando '%d'
o '%s'
se produciría un error. En su lugar, podemos usar '%r'
para imprimir todos estos valores.
Amablemente Edita tu respuesta – Rajesh
%s <=> str
%r <=> repr
%r
llamadas repr()
en el objeto, e inserta la cadena resultante devuelto por __repr__
.
La cadena devuelta por __repr__
debe ser inequívoca y, de ser posible, debe coincidir con el código fuente necesario para recrear el objeto que se está representando.
Un ejemplo rápido:
class Foo:
def __init__(self, foo):
self.foo = foo
def __repr__(self):
return 'Foo(%r)' % self.foo
def __str__(self):
return self.foo
test = Foo('Text')
Así,
in[1]: test
Out[1]: Foo('Text')
in[2]: str(test)
Out[2]: 'Text'
que he encontrado% r ser útil para imprimir una cadena de codificación desconocido, de lo contrario, cuando un error puede ser expulsado con% s – dan