>>> x = 'foo'
>>> x
'foo'
Entonces el nombre x
se adjunta a la 'foo'
cadena. Cuando llama, por ejemplo, repr(x)
el intérprete pone en 'foo'
lugar de x
y luego llama repr('foo')
.
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
repr
en realidad llama a un método mágico __repr__
de x
, que proporciona la cadena que contiene la representación del valor 'foo'
asignado a x
. Por lo tanto, vuelve 'foo'
dentro de la cadena que ""
resulta en "'foo'"
. La idea de repr
es dar una cadena que contenga una serie de símbolos que podamos escribir en el intérprete y obtener el mismo valor que se envió como argumento repr
.
>>> eval("'foo'")
'foo'
Cuando llamamos eval("'foo'")
, es lo mismo que escribimos 'foo'
en el intérprete. Es como escribimos directamente el contenido de la cadena externa ""
en el 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
Si llamamos eval('foo')
, es lo mismo que escribimos foo
en el intérprete. Pero no hay una foo
variable disponible y se genera una excepción.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
str
es solo la representación de cadena del objeto (recuerde, x
variable se refiere a 'foo'
), por lo que esta función devuelve cadena.
>>> str(5)
'5'
La representación de cadena del número entero 5
es '5'
.
>>> str('foo')
'foo'
Y la representación de cadena de cadena 'foo'
es la misma cadena 'foo'
.