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