>>> x = 'foo'
>>> x
'foo'
Le nom xest donc attaché à une 'foo'chaîne. Lorsque vous appelez par exemple, repr(x)l'interpréteur met 'foo'au lieu de xpuis appelle repr('foo').
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
reprappelle en fait une méthode magique __repr__de x, qui donne la chaîne contenant la représentation de la valeur 'foo'assignée à x. Donc, il retourne 'foo'à l'intérieur de la chaîne ""résultant en "'foo'". L'idée de represt de donner une chaîne qui contient une série de symboles que nous pouvons taper dans l'interpréteur et obtenir la même valeur qui a été envoyée en argument repr.
>>> eval("'foo'")
'foo'
Lorsque nous appelons eval("'foo'"), c'est la même chose que nous tapons 'foo'dans l'interpréteur. C'est comme nous tapons directement le contenu de la chaîne externe ""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 nous tapons foodans l'interpréteur. Mais il n'y a pas de foovariable disponible et une exception est levée.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
strest juste la représentation sous forme de chaîne de l'objet (rappelez-vous, la xvariable fait référence à 'foo'), donc cette fonction renvoie une chaîne.
>>> str(5)
'5'
La représentation sous forme de chaîne d'un entier 5est '5'.
>>> str('foo')
'foo'
Et la représentation sous forme de chaîne de chaîne 'foo'est la même chaîne 'foo'.