>>> x = 'foo'
>>> x
'foo'
Portanto, o nome xestá anexado à 'foo'string. Quando você chama, por exemplo, repr(x)o intérprete coloca em 'foo'vez de xe depois chama repr('foo').
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
reprrealmente chama um método mágico __repr__de x, que fornece a string que contém a representação do valor 'foo'atribuído a x. Portanto, ele retorna 'foo'dentro da string ""resultante "'foo'". A idéia repré fornecer uma string que contenha uma série de símbolos que possamos digitar no intérprete e obter o mesmo valor que foi enviado como argumento para repr.
>>> eval("'foo'")
'foo'
Quando chamamos eval("'foo'"), é o mesmo que digitamos 'foo'no intérprete. É como digitamos diretamente o conteúdo da string externa ""no intérprete.
>>> 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 ligarmos eval('foo'), é o mesmo que digitarmos foono intérprete. Mas não há foovariável disponível e uma exceção é gerada.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
stré apenas a representação de string do objeto (lembre-se, a xvariável refere-se a 'foo'), portanto, essa função retorna string.
>>> str(5)
'5'
A representação de sequência de número inteiro 5é '5'.
>>> str('foo')
'foo'
E a representação de string de string 'foo'é a mesma string 'foo'.