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.

Foi útil?

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:

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

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'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top