qual é o significado de %r em python
Pergunta
qual o significado de %r
Na declaração a seguir?
print '%r' % (1)
Eu acho que ouvi de %s
, %d
, e %f
mas nunca ouvi falar disso.
Solução
Fundo:
No Python, existem duas funções construídas para transformar um objeto em uma string: str
vs. repr
. str
É suposto ser uma corda amigável e legível por humanos. repr
deve incluir informações detalhadas sobre o conteúdo de um objeto (às vezes, eles retornam a mesma coisa, como para inteiros). Por convenção, se houver uma expressão python que avaliará para outro objeto que é ==, repr
retornará essa expressão, por exemplo,
>>> print repr('hi') 'hi' # notice the quotes here as opposed to... >>> print str('hi') hi
Se retornar uma expressão não faz sentido para um objeto, repr
deve devolver uma string cercada por símbolos <e>, por exemplo, <blah>
.
Para responder sua pergunta original:
Além disso:
Você pode controlar a maneira como uma instância de suas próprias classes se converte em strings implementando __str__
e __repr__
métodos.
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
Outras dicas
Liga repr()
no objeto e insere a sequência resultante.
Imprime a substituição como uma corda com repr()
.
Adicionando às respostas dadas acima, '%r'
pode ser útil em um cenário em que você tem uma lista com tipo de dados heterogêneos. Digamos que temos um list = [1, 'apple' , 2 , 'r','banana']
Obviamente neste caso usando '%d'
ou '%s'
causaria um erro. Em vez disso, podemos usar '%r'
Para imprimir todos esses valores.
A diferença entre %r
e %s
é, %r
chama o repr()
método e %s
chama o str()
método. Ambos são funções embutidas do Python.
o repr()
O método retorna uma representação imprimível do objeto especificado. o str()
O método retorna a representação "informal" ou bem imprimível de um determinado objeto.
Em linguagem simples, o que o str()
O método é imprimir o resultado de uma maneira que o usuário final gostaria de ver:
name = "Adam"
str(name)
Out[1]: 'Adam'
o repr()
O método imprimiria ou mostraria como é realmente um objeto:
name = "Adam"
repr(name)
Out[1]: "'Adam'"
Ver Operações de formatação de string nos documentos. Observe que %s e %d etc, podem funcionar de maneira diferente de como você espera se estiver acostumado com a maneira como eles funcionam em outro idioma como C.
Em particular, o %S também funciona bem para INTs e carros alegóricos, a menos que você tenha requisitos especiais de formatação, onde %d ou %f lhe darão mais controle.
%s <=> str
%r <=> repr
%r
chamadas repr()
no objeto e insere a sequência resultante retornada por __repr__
.
A string devolvida por __repr__
deve ser inequívoco e, se possível, corresponder ao código -fonte necessário para recriar o objeto que está sendo representado.
Um exemplo 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')
Então,
in[1]: test
Out[1]: Foo('Text')
in[2]: str(test)
Out[2]: 'Text'