>>> 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'
.