>>> x = 'foo'
>>> x
'foo'
Quindi il nome xè associato alla 'foo'stringa. Quando chiamate ad esempio repr(x)l'interprete inserisce 'foo'invece di xe quindi chiama repr('foo').
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
reprin realtà chiama un metodo magico __repr__di x, che fornisce la stringa contenente la rappresentazione del valore 'foo'assegnato a x. Quindi ritorna 'foo'all'interno della stringa ""risultante "'foo'". L'idea reprè di dare una stringa che contenga una serie di simboli che possiamo digitare nell'interprete e ottenere lo stesso valore a cui è stato inviato come argomento repr.
>>> eval("'foo'")
'foo'
Quando chiamiamo eval("'foo'"), è lo stesso che digitiamo 'foo'nell'interprete. È come digitiamo direttamente il contenuto della stringa esterna ""nell'interprete.
>>> eval('foo')
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
eval('foo')
File "<string>", line 1, in <module>
NameError: name 'foo' is not defined
Se chiamiamo eval('foo'), è lo stesso che digitiamo foonell'interprete. Ma non è foodisponibile alcuna variabile e viene sollevata un'eccezione.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
strè solo la rappresentazione in forma di stringa dell'oggetto (ricorda, la xvariabile si riferisce a 'foo'), quindi questa funzione restituisce una stringa.
>>> str(5)
'5'
La rappresentazione in formato stringa dell'intero 5è '5'.
>>> str('foo')
'foo'
E la rappresentazione in formato stringa di stringa 'foo'è la stessa stringa 'foo'.