>>> x = 'foo'
>>> x
'foo'
Portanto, o nome x
está anexado à 'foo'
string. Quando você chama, por exemplo, repr(x)
o intérprete coloca em 'foo'
vez de x
e depois chama repr('foo')
.
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
repr
realmente 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 foo
no intérprete. Mas não há foo
variá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 x
variá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'
.