>>> x = 'foo'
>>> x
'foo'
Donc le nom x
est attaché à 'foo'
chaîne. Lorsque vous appelez par exemple repr(x)
l'interprète met 'foo'
au lieu de x
et appelle ensuite repr('foo')
.
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
repr
appelle en fait une méthode magique __repr__
de x
ce qui donne le chaîne de caractères contenant la représentation de la valeur 'foo'
affecté à x
. Il retourne donc 'foo'
à l'intérieur de la chaîne ""
ce qui entraîne "'foo'"
. L'idée de repr
est de donner une chaîne de caractères contenant une série de symboles que nous pouvons taper dans l'interpréteur et obtenir la même valeur que celle envoyée en argument à repr
.
>>> eval("'foo'")
'foo'
Quand nous appelons eval("'foo'")
c'est la même chose que lorsque nous tapons 'foo'
dans l'interpréteur. C'est comme si nous tapions directement le contenu de la chaîne extérieure ""
dans l'interpréteur.
>>> 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 nous appelons eval('foo')
c'est la même chose que lorsque nous tapons foo
dans l'interpréteur. Mais il n'y a pas de foo
disponible et une exception est levée.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
str
est juste la représentation en chaîne de l'objet (rappelez-vous, x
la variable se réfère à 'foo'
), cette fonction renvoie donc une chaîne.
>>> str(5)
'5'
Représentation en chaîne de l'entier 5
es '5'
.
>>> str('foo')
'foo'
Et la représentation de la chaîne de caractères 'foo'
est la même chaîne 'foo'
.