2014-06-06 19 views

Trả lời

42

Những gì bạn đang thấy là đại diện của my_string được tạo bởi phương thức __repr__(). Nếu bạn in nó, bạn có thể thấy rằng bạn đã thực sự có những dấu xồ nguợc duy nhất, cũng giống như bạn dự định:

>>> print(my_string) 
why\does\it\happen? 

Bạn có thể nhận các đại diện tiêu chuẩn của một chuỗi (hoặc bất kỳ đối tượng khác) với repr() built-in chức năng:

>>> print(repr(my_string)) 
'why\\does\\it\\happen?' 

Python đại diện backslashes trong chuỗi như \\ vì xuyệc ngược là một nhân vật chạy thoát - ví dụ, \n đại diện cho một dòng mới, và \t đại diện cho một tab.

này đôi khi có thể giúp bạn có được vào rắc rối:

>>> print("this\text\is\not\what\it\seems") 
this ext\is 
ot\what\it\seems 

Bởi vì điều này, cần phải có một cách để nói với Python bạn thực sự muốn hai nhân vật \n chứ không phải là một dòng mới, và bạn làm điều đó bằng cách thoát khỏi dấu chéo ngược chính nó, với một số khác:

>>> print("this\\text\is\what\you\\need") 
this\text\is\what\you\need 

Khi Python trả về đại diện của một chuỗi, nó đóng an toàn, thoát tất cả những dấu xồ nguợc (ngay cả khi họ sẽ không khác là một phần của một es trình tự mũi tên) và đó là những gì bạn đang thấy. Tuy nhiên, chính chuỗi đó chỉ chứa một dấu gạch chéo ngược duy nhất.

Thông tin thêm về chuỗi ký tự của Python có thể tìm thấy tại: String and Bytes literals trong tài liệu Python.

+2

Tôi đã cố gắng giữ câu trả lời này tập trung cụ thể vào sự hiểu lầm "gấp đôi dấu chéo ngược", nhưng cũng hữu ích khi biết về [literal literals string] (http://stackoverflow.com/questions/2081640). –

Các vấn đề liên quan