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