Почему я получаю формат u "xyz", когда печатаю список строк Unicode в Python? - PullRequest
1 голос
/ 02 февраля 2010

Пожалуйста, соблюдайте следующее поведение:

a = u"foo"
b = u"b\xe1r"   # \xe1 is an 'a' with an accent
s = [a, b]

print a, b
print s
for x in s: print x,

Результат:

foo bár
[u'foo', u'b\xe1r']
foo bár

Когда я просто печатаю два значения, сидящие в переменных a и b, я получаю то, что ожидаю; когда я помещаю строковые значения в список и распечатываю его, я получаю нежелательную форму u"xyz"; наконец, когда я печатаю значения из списка с помощью цикла, я снова получаю первую форму. Может кто-нибудь объяснить это странное поведение? Я знаю, что, вероятно, есть веская причина.

Ответы [ 3 ]

7 голосов
/ 02 февраля 2010

Когда вы печатаете список, вы получаете repr() каждого элемента, списки на самом деле не предназначены для печати, поэтому python пытается напечатать что-то, представляющее его структуру.

Если вы хотите отформатировать его каким-либо конкретным способом, либо четко укажите, как вы хотите его отформатировать, либо измените его метод __repr__.

1 голос
/ 02 февраля 2010

Объекты в Python могут быть превращены в строки двумя способами: грубо говоря, str () создает читабельный вывод для человека, а repr () - читаемый компьютером вывод. Когда вы печатаете что-то, он использует str ().

Но str () списка использует repr () своих элементов.

0 голосов
/ 02 февраля 2010

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

Поскольку список может содержать что угодно, вы получаете синтаксис u'foo'. Если бы вы использовали строки не-Unicode, вы бы увидели 'foo' вместо просто foo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...