recorrer - ¿Cuál es el significado de% r en python?
recorrer data frame pandas (6)
Agregando a las respuestas dadas arriba, ''%r''
puede ser útil en un escenario donde tiene una lista con tipo de datos heterogéneos. Digamos que tenemos una list = [1, ''apple'' , 2 , ''r'',''banana'']
Obviamente, usar ''%d''
o ''%s''
provocaría un error. En cambio, podemos usar ''%r''
para imprimir todos estos valores.
¿Cuál es el significado de %r
en la siguiente declaración?
print ''%r'' % (1)
Creo que he oído hablar de %s
, %d
y %f
pero nunca he oído hablar de esto.
Fondo:
En Python, hay dos funciones integradas para convertir un objeto en una cadena: str
vs. repr
. str
se supone que es una cadena amigable y legible para los humanos. se supone que repr
incluye información detallada sobre los contenidos de un objeto (a veces, devolverán 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, por ejemplo:
>>> print repr(''hi'') ''hi'' # notice the quotes here as opposed to... >>> print str(''hi'') hi
Si devolver una expresión no tiene sentido para un objeto, repr
debería devolver una cadena que esté rodeada por los símbolos <y>, por ejemplo, <blah>
.
Para responder a su pregunta original:
En adición:
Puede controlar la forma en que una instancia de sus propias clases se convierte en 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
Imprime el reemplazo como una cadena con repr()
.
Llama a repr()
en el objeto e inserta la cadena resultante.
Vea Cadenas de operaciones de formato 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 tenga requisitos especiales de formato donde% d o% f le dará más control.
%s <=> str
%r <=> repr
%r
llama a repr()
en el objeto e inserta la cadena resultante devuelta por __repr__
.
La cadena devuelta por __repr__
debe ser ambigua 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'')
Asi que,
in[1]: test
Out[1]: Foo(''Text'')
in[2]: str(test)
Out[2]: ''Text''