Почему __repr__ в python является более читабельным, чем __str__? - PullRequest
0 голосов
/ 01 ноября 2018

См. Пример ниже:

In [33]: test = {x:str(x)*10 for x in range(10)}

In [35]: print test
{0: '0000000000', 1: '1111111111', 2: '2222222222', 3: '3333333333', 4: '4444444444', 5: '5555555555', 6: '6666666666', 7: '7777777777', 8: '8888888888', 9: '9999999999'}

In [34]: test
Out[34]: 
{0: '0000000000',
 1: '1111111111',
 2: '2222222222',
 3: '3333333333',
 4: '4444444444',
 5: '5555555555',
 6: '6666666666',
 7: '7777777777',
 8: '8888888888',
 9: '9999999999'}

Вывод функции печати (__str__) объективно менее читабелен, чем вывод __repr__. Это длинная строка, которая будет переноситься в несколько строк без пробелов. Оба они достаточно однозначны, чтобы позволить вам реконструировать объект с их выводом.

Разве здесь не имеет смысла обратный вывод: __repr__ - это компактное представление, а __str__ - более читаемые переносы строк?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Это просто ipython. В стандартном Python 3.7 REPL это вывод:

>>> test = {x:str(x)*10 for x in range(10)}
>>> print(test)
{0: '0000000000', 1: '1111111111', 2: '2222222222', 3: '3333333333', 4: '4444444444', 5: '5555555555', 6: '6666666666', 7: '7777777777', 8: '8888888888', 9: '9999999999'}
>>> test
{0: '0000000000', 1: '1111111111', 2: '2222222222', 3: '3333333333', 4: '4444444444', 5: '5555555555', 6: '6666666666', 7: '7777777777', 8: '8888888888', 9: '9999999999'}
>>>

Вывод будет таким же, если мы выполним его как «нормальный» скрипт:

test = {x: str(x) * 10 for x in range(10)}
print(str(test))
#  {0: '0000000000', 1: '1111111111', 2: '2222222222', 3: '3333333333', 4: '4444444444', 5: '5555555555', 6: '6666666666', 7: '7777777777', 8: '8888888888', 9: '9999999999'}
print(repr(test))
#  {0: '0000000000', 1: '1111111111', 2: '2222222222', 3: '3333333333', 4: '4444444444', 5: '5555555555', 6: '6666666666', 7: '7777777777', 8: '8888888888', 9: '9999999999'}

Никаких разрывов строк в представлениях str или repr, как ранее упоминалось в комментариях:

print(repr(test) == str(test))
# True

Вывод таков: это всего лишь ipython, который берет на себя инициативу, чтобы сделать вывод repr более удобным для человека.

0 голосов
/ 01 ноября 2018

IPython делает это, поэтому print делает обычные вещи, но просто именование переменных делает классные вещи, вот почему ...

печать pandas dataframes с print становится уродливой, а просто именование переменной делает красиво

Обратите внимание, что @ Аран-Фей говорит :

"Это поразит вас: repr(test) == str(test)"

По правде говоря, интерпретаторы не-IPython этого не делают.

...