>>> x = 'foo'
>>> x
'foo'
Так ім’я xдодається до 'foo'рядка. Наприклад, коли ви телефонуєте, repr(x)перекладач 'foo'замість цього ставить, а xпотім дзвонить repr('foo').
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
reprна самому справі викликає метод магічного __repr__з x, який дає рядок , що містить уявлення значення 'foo'присвоєного x. Таким чином, він повертається 'foo'всередині рядка, в ""результаті чого "'foo'". Ідея reprполягає в тому, щоб дати рядок, який містить низку символів, до яких ми можемо набрати інтерпретатора, і отримати те саме значення, яке було надіслано як аргумент repr.
>>> eval("'foo'")
'foo'
Коли ми телефонуємо eval("'foo'"), це те саме, що ми вводимо 'foo'в перекладача. Це так, як ми безпосередньо набираємо вміст зовнішнього рядка ""в інтерпретаторі.
>>> 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
Якщо ми зателефонуємо eval('foo') , це те саме, що ми вводимо fooв перекладача. Але немає fooзмінної, і виняток є.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
str це лише рядкове представлення об'єкта (пам'ятайте, x змінна посилається на 'foo'), тому ця функція повертає рядок.
>>> str(5)
'5'
Рядок представлення цілого числа 5 є '5'.
>>> str('foo')
'foo'
А рядкове представлення рядка 'foo'- це та сама строка 'foo'.