Понимание функции repr () в Python



repr(): вычисляемое строковое представление объекта (can " eval()"
это означает, что это строковое представление, которое вычисляется на Python
объект)



другими словами:



>>> x = 'foo'
>>> repr(x)
"'foo'"


вопросы:




  1. почему я получаю двойные кавычки, когда я делаю repr(x)? (Я их не понимаю
    когда я делаю str(x))

  2. почему я получаю 'foo' когда я делаю eval("'foo'") а не x, который является
    возражаете?

964   5  

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'). И тогда интерпретатор создает repr esentation of это, оставив вас с двойными кавычками.

почему, когда я объединяю %r с двойной кавычкой и одиночная цитата ускользает и распечатывает их, он печатает ее так, как я бы написал ее в своем файле .py, но не так, как я хотел бы ее видеть?

Я не уверен, что вы спрашиваете здесь. Текст single ' and double " quotes при запуске через repr, включает в себя побеги для одного вида цитаты. Конечно, это так, иначе это не был бы допустимый строковый литерал по правилам Python. Это именно то, что вы просили, позвонив repr.

также обратите внимание, что eval(repr(x)) == x аналогия не буквальная. Это приближение и справедливо для большинства (всех?) встроенные типы, но главное, что вы получаете довольно хорошее представление о типе и логическом "значении" от просмотра The repr выход.

1) результат repr('foo') это строка'foo'. В вашей оболочке Python результат выражения также выражается как представление, поэтому вы по существу видите repr(repr('foo')).

2) eval вычисляет результат выражения. В результате всегда получается стоимостью (например, число, строка или объект). Несколько переменных могут ссылаться на одно и то же значение, например:

x = 'foo'
y = x

x и y теперь относятся к одному и тому же значение.

3) я понятия не имею, что вы имели в виду здесь. Можете ли вы опубликовать пример, и что вы хотели бы видеть?

когда вы говорите

foo = 'bar'
baz(foo)

вы не проходя foo до

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

    Ничего не найдено.