Không thực sự có bất kỳ " chuỗi thô " nào; có các chuỗi ký tự thô , chính xác là các chuỗi ký tự được đánh dấu bởi một 'r'
trước khi trích dẫn mở đầu.
Một "chuỗi ký tự thô" là một cú pháp hơi khác nhau đối với một chuỗi ký tự, trong đó một dấu gạch chéo ngược, \
được hiểu là "chỉ một dấu gạch chéo ngược" (ngoại trừ khi nó xuất hiện ngay trước một trích dẫn có thể chấm dứt nghĩa đen) - không "Trình tự thoát" để thể hiện các dòng mới, tab, khoảng cách, nguồn cấp dữ liệu, v.v. Trong các chuỗi ký tự thông thường, mỗi dấu gạch chéo ngược phải được nhân đôi để tránh bị bắt làm chuỗi bắt đầu.
Biến thể cú pháp này tồn tại chủ yếu là do cú pháp của các mẫu biểu thức chính quy nặng nề với dấu gạch chéo ngược (nhưng không bao giờ ở cuối, vì vậy mệnh đề "ngoại trừ" ở trên không thành vấn đề) và có vẻ tốt hơn một chút khi bạn tránh nhân đôi mỗi trong số chúng - - đó là tất cả. Nó cũng được phổ biến để thể hiện đường dẫn tệp Windows gốc (với dấu gạch chéo ngược thay vì dấu gạch chéo thông thường như trên các nền tảng khác), nhưng điều đó rất hiếm khi cần (vì các dấu gạch chéo thông thường cũng hoạt động tốt trên Windows) và không hoàn hảo (do mệnh đề "ngoại trừ" ở trên).
r'...'
là một chuỗi byte (bằng Python 2. *), ur'...'
là một chuỗi Unicode (một lần nữa, bằng Python 2. *), và một trong ba loại khác trích dẫn cũng sản xuất một cách chính xác các loại tương tự của chuỗi (ví dụ như vậy r'...'
, r'''...'''
, r"..."
, r"""..."""
là tất cả các chuỗi byte, v.v.).
Không chắc chắn ý của bạn là gì khi " quay lại " - về bản chất không có hướng quay lại và chuyển tiếp, bởi vì không có kiểu chuỗi thô , nó chỉ là một cú pháp thay thế để diễn tả các đối tượng chuỗi hoàn toàn bình thường, byte hoặc unicode như chúng có thể.
Và vâng, bằng Python 2. *, u'...'
là dĩ nhiên luôn luôn khác biệt với chỉ '...'
- cựu là một chuỗi unicode, sau này là một chuỗi byte. Những gì mã hóa theo nghĩa đen có thể được thể hiện là một vấn đề hoàn toàn trực giao.
Ví dụ: xem xét (Python 2.6):
>>> sys.getsizeof('ciao')
28
>>> sys.getsizeof(u'ciao')
34
Tất nhiên, đối tượng Unicode chiếm nhiều dung lượng bộ nhớ hơn (sự khác biệt rất nhỏ đối với một chuỗi rất ngắn, rõ ràng ;-).