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