2010-03-01 19 views

Respuesta

60

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:

%s < ->str
%r < ->repr

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 
+7

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

20

Llama al repr() en el objeto e inserta la cadena resultante.

4

Imprime el reemplazo como una cadena con repr().

0

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.

3

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.

+0

Amablemente Edita tu respuesta – Rajesh

0
%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' 
Cuestiones relacionadas