Sebenarnya tidak ada " string mentah "; ada literal string mentah , yang persis literal string ditandai oleh 'r'
sebelum kutipan pembukaan.
"Raw string literal" adalah sintaks yang sedikit berbeda untuk string literal, di mana backslash, \
dianggap sebagai "hanya backslash" (kecuali ketika muncul tepat sebelum kutipan yang dinyatakan akan mengakhiri literal) - tidak "escape sequence" untuk mewakili baris baru, tab, spasi mundur, umpan formulir, dan sebagainya. Dalam literal string normal, setiap garis miring terbalik harus digandakan untuk menghindari diambil sebagai awal dari urutan pelarian.
Varian sintaksis ini ada sebagian besar karena sintaksis pola ekspresi reguler berat dengan garis miring terbalik (tetapi tidak pernah pada akhirnya, jadi klausa "kecuali" di atas tidak masalah) dan terlihat sedikit lebih baik ketika Anda menghindari penggandaan masing-masing - - itu saja. Itu juga mendapatkan beberapa popularitas untuk mengekspresikan jalur file Windows asli (dengan backslash bukan garis miring biasa seperti pada platform lain), tetapi itu sangat jarang diperlukan (karena garis miring yang normal sebagian besar bekerja dengan baik pada Windows juga) dan tidak sempurna (karena klausa "kecuali" atas).
r'...'
adalah string byte (Python 2. *), ur'...'
adalah string Unicode (sekali lagi, dengan Python 2. *), dan salah satu dari tiga jenis lain mengutip juga menghasilkan jenis yang sama persis dari string (jadi misalnya r'...'
, r'''...'''
, r"..."
, r"""..."""
semua byte string, dan sebagainya).
Tidak yakin apa yang Anda maksud dengan " kembali " - tidak ada arah intrinsik maju dan mundur, karena tidak ada jenis string mentah , itu hanya sintaks alternatif untuk mengekspresikan objek string normal, byte atau unicode.
Dan ya, di Python 2. *, u'...'
adalah tentu saja selalu berbeda dari hanya '...'
- yang pertama adalah string unicode, yang terakhir adalah string byte. Pengkodean literal apa yang mungkin diekspresikan adalah masalah yang sepenuhnya ortogonal.
Misalnya, pertimbangkan (Python 2.6):
>>> sys.getsizeof('ciao')
28
>>> sys.getsizeof(u'ciao')
34
Objek Unicode tentu saja membutuhkan lebih banyak ruang memori (perbedaan sangat kecil untuk string yang sangat pendek, jelas ;-).