LINUX.ORG.RU

В первом случае тебе интерпретатор выводит результат выражения в таком виде, в котором его можно вставить в программу. Во втором случае ты просто выводишь строку на экран.

provaton ★★★★★
()

потому, что принт форматирует вывод:

print evaluates each expression in turn and writes the resulting object to standard output (see below). If an object is not a string, it is first converted to a string using the rules for string conversions. The (resulting or original) string is then written. A space is written before each object is (converted and) written, unless the output system believes it is positioned at the beginning of a lin…

а выполнение в интерактивной камсоли ф-и отображает объект без форматирования на вывод. мб щас придут и объяснят умнымит словами

anonymous
()

В принципе уже ответили. Вот практический пример:

>>> class Foo():
...    def __repr__(self): return 'repr(Foo instance)'
...    def __str__(self): return 'str(Foo instance)'
... 
>>> bar = Foo()
>>> print bar
str(Foo instance)
>>> str(bar)
'str(Foo instance)'
>>> bar
repr(Foo instance)
>>> `bar`
'repr(Foo instance)'
>>> repr(bar)
'repr(Foo instance)'
>>> 

man str, repr

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

А как вот это объяснить ?

>>> a.__str__()
'\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb5\xd1\x80\xd0\xba\xd0\xb0!'
>>> a.__repr__()
"'\\xd0\\x9f\\xd1\\x80\\xd0\\xbe\\xd0\\xb2\\xd0\\xb5\\xd1\\x80\\xd0\\xba\\xd0\\xb0!'"
>>> print a
Проверка!
Про принцип работы str и repr я знаю

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

Что объяснить? Оператор print берет строковое представление объекта, наиболее пригодное для вывода. Ключевое слова - наиболее пригодное. Для юникод-объектов его получают перекодированием в строку в текущей кодировке (sys.getdefaultencoding()), а не с помощью str(<unicode-obj>) (крякозябры читаемыми никак не назовешь). То есть выполняется примерно такой код

u'\xd0\x9f\xd1\x80\xd0\xbe \xd0\xb2\xd0\xb5\xd1\x80 \xd0\xba\xd0\xb0!'.encode(sys.getdefaultencoding())

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

А, понятно, я просто думал что мне как всегда придется о подобных вещах заботится самому, спасибо.

deterok ★★★★★
() автор топика
Ответ на: комментарий от pevzi

Так я с них из-за этого пересел пол года назад...

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

Вот тут презентация доклада PyCon 2008 года, который расставит все точки над i - Unicode In Python, Completely Demystified. (Это презентация на js, чтобы перейти к след. кадру жми стрелку вправо на клаве.)

Еще неплохо было бы осилить статью «The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)» написанную Джоэлом Спольски 10 лет назад. Она не про питон, но все же маст рид для любого программиста. (Линк)

beka
()
Ответ на: комментарий от beka

Спасибо за ссылку, интересная статейка.

deterok ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.