Khi tôi tạo chuỗi chứa dấu gạch chéo ngược, chúng được sao y:Tại sao dấu gạch chéo ngược xuất hiện hai lần?
>>> my_string = "why\does\it\happen?"
>>> my_string
'why\\does\\it\\happen?'
Tại sao?
Khi tôi tạo chuỗi chứa dấu gạch chéo ngược, chúng được sao y:Tại sao dấu gạch chéo ngược xuất hiện hai lần?
>>> my_string = "why\does\it\happen?"
>>> my_string
'why\\does\\it\\happen?'
Tại sao?
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.
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). –