qual è il significato di% r in python
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.
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 <blah>
.
Per rispondere alla tua domanda iniziale:
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'