Domanda

qual è il significato della %r nella seguente affermazione?

print '%r' % (1)

Credo di aver sentito parlare di %s, %d, e %f ma mai sentito parlare di questo.

È stato utile?

Soluzione

Sfondo:

In Python, ci sono due funzioni interne per trasformare un oggetto in una stringa: str vs. repr . str si suppone che sia una, stringa leggibile amichevole. repr dovrebbe includere informazioni dettagliate sui contenuti di un oggetto (a volte, torneranno la stessa cosa, come ad esempio per gli interi). Per convenzione, se c'è un'espressione Python che eval a un altro oggetto che è ==, repr restituirà un tale espressione es.

>>> print repr('hi')
'hi'  # notice the quotes here as opposed to...
>>> print str('hi')
hi

Se la restituzione di un espressione non ha senso per un oggetto, repr dovrebbe restituire una stringa che è circondata da simboli per esempio <blah>.

Per rispondere alla tua domanda iniziale:

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

In aggiunta:

È possibile controllare il modo in cui un'istanza di proprie classi di convertire in stringhe mediante l'attuazione di __str__ e __repr__ metodi.

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

Altri suggerimenti

Si chiama repr() sull'oggetto e inserisce la stringa risultante.

Esso stampa la sostituzione di una stringa con repr().

L'aggiunta alle risposte di cui sopra, '%r' può essere utile in uno scenario in cui si dispone di un elenco con il tipo di dati eterogenei. Diciamo, abbiamo un list = [1, 'apple' , 2 , 'r','banana'] Ovviamente in questo caso utilizzando '%d' o '%s' causerebbe un errore. Invece, possiamo usare '%r' per stampare tutti questi valori.

La differenza tra %r e %s è, %r chiama il metodo repr() e %s chiama il metodo str(). Entrambi sono funzioni built-in Python.

Il metodo repr() restituisce una rappresentazione stampabile dell'oggetto dato. Il metodo str() restituisce la rappresentazione "informale" o ben stampabile di un dato oggetto.

In un linguaggio semplice, ciò che il metodo str() fa è il risultato della stampa in un modo che l'utente finale vorrebbe vedere:

name = "Adam"
str(name)
Out[1]: 'Adam'

Il metodo repr() sarebbe stampare o mostrare ciò che un oggetto si presenta come:

name = "Adam"
repr(name)
Out[1]: "'Adam'"

stringa di formattazione Operations nella documentazione. Si noti che% s e% d, ecc, potrebbe funzionare in modo diverso da come ci si aspetta se siete abituati al modo di lavorare in un altro linguaggio come C.

In particolare,% s funziona bene anche per interi e galleggia a meno che non si hanno esigenze particolari di formattazione in cui% do% f vi darà un maggiore controllo.

%s <=> str
%r <=> repr

%r chiama repr() sull'oggetto, e inserisce il risultante stringa restituita da __repr__.

La stringa restituita da __repr__ dovrebbe essere ambiguo e, se possibile, abbinare il codice sorgente necessario per ricreare l'oggetto rappresentato.

Un esempio veloce:

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')

in[1]: test
Out[1]: Foo('Text')


in[2]: str(test)
Out[2]: 'Text'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top