[u'String']
являє собою текстове подання списку, що містить рядок Unicode на Python 2.
Якщо ви запускаєте, print(some_list)
то це рівнозначно,
print'[%s]' % ', '.join(map(repr, some_list))
тобто для створення текстового подання об’єкта Python з типом list
, repr()
для кожного елемента викликається функція.
Не плутайте об'єкт Python і його текстове представлення - repr('a') != 'a'
і навіть текстове представлення тексту подання різний: repr(repr('a')) != repr('a')
.
repr(obj)
повертає рядок, що містить представлений об'єкт для друку. Її мета - бути однозначним поданням об’єкта, який може бути корисним для налагодження, в системі REPL. Часто eval(repr(obj)) == obj
.
Щоб уникнути виклику repr()
, ви можете надрукувати елементи списку безпосередньо (якщо вони є всіма рядками Unicode), наприклад: print ",".join(some_list)
—друкує список розділених комами рядків:String
Не кодуйте рядок Unicode до байтів, використовуючи жорстке кодування символів, друкуйте Unicode безпосередньо замість цього. В іншому випадку код може вийти з ладу, оскільки кодування не може представляти всіх символів, наприклад, якщо ви намагаєтеся використовувати 'ascii'
кодування з символами, які не є ascii. Або код мовчки виробляє mojibake (пошкоджені дані передаються далі в конвеєр), якщо середовище використовує кодування, несумісне з жорстко кодованим кодуванням.