Насправді немає жодної "сирої струни "; Є необроблені рядкові літерали , які є саме строковими літералами, позначеними знаком "" 'r'
перед початком цитати.
"Сирий буквений рядок" - це дещо інший синтаксис для рядкового літералу, в якому зворотна косої риси \
сприймається як значення "просто зворотній косою рисою" (за винятком випадків, коли вони надходять прямо перед цитатою, яка в іншому випадку припиняє літерал) - ні "послідовності втечі" для відображення нових рядків, вкладок, зворотних просторів, форм-стрічок тощо. У звичайних літеральних рядках кожен зворотний проріз повинен бути подвоєний вдвічі, щоб уникнути його прийняття як початок послідовності проходження.
Цей варіант синтаксису існує здебільшого тому, що синтаксис регулярних виразів виразів важкий з косою косою рисою (але ніколи в кінці, тому пункт «крім» вище не має значення), і це виглядає трохи краще, коли ви уникаєте подвоєння кожного з них - - це все. Він також набув деякої популярності для вираження власних шляхів до файлів Windows (з косою косою рисою, а не з звичайними косою рисою, як на інших платформах), але це дуже рідко потрібно (оскільки звичайні косої риси в основному добре працюють і в Windows) і недосконалі (через пункт "крім" вище).
r'...'
є байт рядка (в Python 2. *), ur'...'
це рядок Unicode (знову ж , в Python 2. *), і будь-який з трьох інших видів процитувати також виробляє одні і ті ж типи рядків (так, наприклад r'...'
, r'''...'''
, r"..."
, r"""..."""
є всі рядки байтів тощо).
Не впевнений, що ви маєте на увазі під "поверненням назад " - немає внутрішніх напрямків назад і вперед, тому що немає необмеженого рядкового типу , це просто альтернативний синтаксис для вираження ідеально нормальних рядкових об'єктів, байтів або Unicode, якими вони можуть бути.
І так, в Python 2. *, u'...'
це , звичайно , завжди відрізняється від всього '...'
- колишній є рядком Юникода, останній рядок байт. Те, що кодування буквалу може бути виражене, є повністю ортогональним питанням.
Наприклад, врахуйте (Python 2.6):
>>> sys.getsizeof('ciao')
28
>>> sys.getsizeof(u'ciao')
34
Об'єкт Unicode, звичайно, займає більше місця в пам'яті (очевидно, дуже мала різниця для дуже короткого рядка ;-).