На самом деле нет никакой «необработанной строки »; есть необработанные строковые литералы , которые в точности являются строковыми литералами, помеченными 'r'
перед открывающей кавычкой.
«Необработанный строковый литерал» - это немного другой синтаксис для строкового литерала, в котором обратный слеш \
рассматривается как означающий «просто обратный слеш» (за исключением случаев, когда он идет прямо перед кавычкой, которая в противном случае завершила бы литерал) - нет «escape-последовательности» для представления новых строк, вкладок, обратных символов, каналов и т. д. В обычных строковых литералах каждый обратный слеш должен быть удвоен, чтобы его не принимали за начало escape-последовательности.
Этот вариант синтаксиса существует главным образом потому, что синтаксис шаблонов регулярных выражений насыщен обратными слешами (но никогда не заканчивается, поэтому вышеприведенное предложение «исключая» не имеет значения) и выглядит немного лучше, когда вы не удваиваете каждый из них - - это все. Он также приобрел некоторую популярность для выражения собственных путей к файлам Windows (с обратными слешами вместо обычных слешей, как на других платформах), но это очень редко необходимо (так как нормальные слэши в основном работают также и в Windows) и несовершенным (из-за предложения «кроме» над).
r'...'
является байт строки (в Python 2. *), ur'...'
это строка Unicode (опять же , в Python 2. *), и любой из трех других видов процитировать также производит одни и те же типы строк (так, например r'...'
, r'''...'''
, r"..."
, r"""..."""
все байтовые строки и т. д.).
Не уверен, что вы имеете в виду под « возвращением » - нет внутренних указаний назад и вперед, потому что нет необработанного строкового типа , это просто альтернативный синтаксис для выражения совершенно обычных строковых объектов, байтов или юникодов, какими они могут быть.
И да, в Python 2. *, u'...'
это , конечно , всегда отличается от всего '...'
- бывший является строкой Юникода, последняя строка байт. В чем может быть выражена кодировка литерала - это совершенно ортогональный вопрос.
Например, рассмотрим (Python 2.6):
>>> sys.getsizeof('ciao')
28
>>> sys.getsizeof(u'ciao')
34
Разумеется, объект Unicode занимает больше места в памяти (очевидно, очень небольшая разница для очень короткой строки ;-).