Понимание функции repr () в Python
repr(): вычисляемое строковое представление объекта (can " eval()"
это означает, что это строковое представление, которое вычисляется на Python
объект)
другими словами:
>>> x = 'foo'
>>> repr(x)
"'foo'"
вопросы:
- почему я получаю двойные кавычки, когда я делаю
repr(x)? (Я их не понимаю
когда я делаюstr(x)) - почему я получаю
'foo'когда я делаюeval("'foo'")а не x, который является
возражаете?
5 ответов:
>>> 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'.
обратная связь, которую вы получаете от интерактивного интерпретатора, использует
reprтоже. Когда вы вводите выражение (пусть это будетexpr), переводчик в основном делаетresult = expr; if result is not None: print repr(result). Так что вторая строка в вашем примере и форматирование строкиfooв представление, которое вы хотите ('foo'). И тогда интерпретатор создаетrepresentation of это, оставив вас с двойными кавычками.почему, когда я объединяю %r с двойной кавычкой и одиночная цитата ускользает и распечатывает их, он печатает ее так, как я бы написал ее в своем файле .py, но не так, как я хотел бы ее видеть?
Я не уверен, что вы спрашиваете здесь. Текст
single ' and double " quotesпри запуске черезrepr, включает в себя побеги для одного вида цитаты. Конечно, это так, иначе это не был бы допустимый строковый литерал по правилам Python. Это именно то, что вы просили, позвонивrepr.также обратите внимание, что
eval(repr(x)) == xаналогия не буквальная. Это приближение и справедливо для большинства (всех?) встроенные типы, но главное, что вы получаете довольно хорошее представление о типе и логическом "значении" от просмотра Thereprвыход.
1) результат
repr('foo')это строка'foo'. В вашей оболочке Python результат выражения также выражается как представление, поэтому вы по существу видитеrepr(repr('foo')).2)
evalвычисляет результат выражения. В результате всегда получается стоимостью (например, число, строка или объект). Несколько переменных могут ссылаться на одно и то же значение, например:x = 'foo' y = xx и y теперь относятся к одному и тому же значение.
3) я понятия не имею, что вы имели в виду здесь. Можете ли вы опубликовать пример, и что вы хотели бы видеть?
str() используется для создания вывода для конечного пользователя, в то время как repr () используется для разработки debuggin.И это представляет собой официальный объект.
пример:
>>> import datetime >>> today = datetime.datetime.now() >>> str(today) '2018-04-08 18:00:15.178404' >>> repr(today) 'datetime.datetime(2018, 4, 8, 18, 3, 21, 167886)'из вывода мы видим, что repr () показывает официальное представление объекта date.
Comments