2016-02-16 10 views
5

Qual è la differenza tra print, object e repr()? Perché stampa in diversi formati?Comprensione differenza tra doppio preventivo e preventivo singolo con __repr __()

Vedere il output difference:

>>> x="This is New era" 
>>> print x    # print in double quote when with print() 
This is New era 

>>> x     # x display in single quote 
'This is New era' 

>>> x.__repr__()  # repr() already contain string 
"'This is New era'" 

>>> x.__str__()   # str() print only in single quote '' 
'This is New era' 
+0

Penso che il nome x sia collegato alla stringa "Questa è una nuova era". Quando ho chiamato ad esempio repr (x) l'iterpreter mette 'This is New era' invece di x e poi chiama repr ('This is New era'). –

risposta

5

Non vi è alcuna differenza semantica tra ' e ". È possibile utilizzare ' se la stringa contiene " e viceversa e Python farà lo stesso. Se la stringa contiene entrambi, è necessario sfuggire ad alcuni di essi (o utilizzare le virgolette triple, """ o '''). (Se entrambi ' e " sono possibili, Python e molti programmatori sembrano preferire ', però.)

>>> x = "string with ' quote" 
>>> y = 'string with " quote' 
>>> z = "string with ' and \" quote" 
>>> x 
"string with ' quote" 
>>> y 
'string with " quote' 
>>> z 
'string with \' and " quote' 

Chi print, str e repr: print sarà stampa la stringa data senza le virgolette aggiuntive, mentre strcrea una stringa dall'oggetto specificato (in questo caso, la stringa stessa) e reprcrea una "stringa di rappresentazione" dall'oggetto (ovvero la stringa che include un insieme di virgolette). In poche parole, la differenza tra str e repr dovrebbe essere che str è facile capire per l'utente e repr è facile capire per Python.

Inoltre, se si immette un'espressione nella shell interattiva, Python emetterà automaticamente il risultato repr. Questo può essere un po 'confuso: Nella shell interattiva, quando si esegue print(x), ciò che si vedere è str(x); quando usi str(x), quello che vedi è repr(str(x)) e quando usi repr(x), vedi repr(repr(x)) (quindi le virgolette doppie).

>>> print("some string") # print string, no result to echo 
some string 
>>> str("some string") # create string, echo result 
'some string' 
>>> repr("some string") # create repr string, echo result 
"'some string'" 
+0

Penso che il nome x sia collegato alla stringa 'This is New was'. Quando ho chiamato ad esempio repr (x) l'iterpreter mette 'This is New era' invece di x e poi chiama repr ('This is New era'). –

+0

'__repr__' è di solito costruito in modo tale che, quando si passa il suo valore di ritorno a' eval', si riceve esattamente lo stesso oggetto '__repr__' in precedenza. Quindi le doppie virgolette attorno alla stringa con quotatura singola, come 'eval (" 'My stringa' ")' funzionerebbe, ma 'eval ('my string')' genererebbe un 'SyntaxError'. Vedi anche [here] (https://docs.python.org/2/library/functions.html#func-repr) – karlson

+0

yeah @karlson ...... eval calcola il risultato di un'espressione. Il risultato è sempre un valore (come un numero, una stringa o un oggetto) –

0

__str__ e __repr__ sono entrambi metodi per ottenere una rappresentazione di stringa di un oggetto. __str__ dovrebbe essere più breve e più user-friendly, mentre __repr__ dovrebbe fornire maggiori dettagli.

Tuttavia, in pitone non v'è alcuna differenza tra apice singolo e doppio preventivo.

1

Vedi __repr__:

Chiamato dal repr() funzione built-in e da conversioni di stringhe (apici inversi) per calcolare la rappresentazione “ufficiale” stringa di un oggetto. Se possibile, dovrebbe apparire come un'espressione Python valida che potrebbe essere utilizzata per ricreare un oggetto con lo stesso valore (dato un ambiente appropriato).

E __str__:

Chiamato dal str() funzione built-in e l'istruzione print per calcolare la rappresentazione di stringa “informale” di un oggetto. Questo differisce da __repr __() in quanto non deve essere un'espressione Python valida: può invece essere utilizzata una rappresentazione più comoda o concisa.

Enfasi aggiunta da me.