>>> x = 'foo'
>>> x
'foo'
Quindi il nome x
è associato alla 'foo'
stringa. Quando chiamate ad esempio repr(x)
l'interprete inserisce 'foo'
invece di x
e quindi chiama repr('foo')
.
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
repr
in 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 foo
nell'interprete. Ma non è foo
disponibile 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 x
variabile 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'
.