Chuỗi thô ngây thơ
Ý tưởng ngây thơ của một chuỗi thô là
Nếu tôi đặt một R trước một cặp trích dẫn, tôi có thể đặt bất cứ điều gì tôi muốn giữa các trích dẫn và nó sẽ có nghĩa là chính nó.
Thật không may, điều này không hoạt động, bởi vì nếu bất cứ điều gì xảy ra có chứa báo giá, chuỗi thô sẽ kết thúc vào thời điểm đó.
Đơn giản là không thể mà tôi có thể đặt "bất cứ điều gì tôi muốn" giữa các trình phân cách cố định, bởi vì một số trong đó có thể trông giống như dấu phân cách chấm dứt - bất kể dấu phân cách đó là gì.
Chuỗi thô trong thế giới thực (biến thể 1)
Một cách tiếp cận có thể cho vấn đề này sẽ là nói
Nếu tôi đặt một R trước một cặp trích dẫn, tôi có thể đặt bất cứ điều gì tôi muốn giữa các trích dẫn miễn là nó không chứa một trích dẫn và nó sẽ có nghĩa là chính nó.as long as it does not contain a quote and it will mean itself.
Hạn chế này nghe có vẻ khắc nghiệt, cho đến khi người ta nhận ra rằng việc cung cấp các trích dẫn lớn của Python có thể phù hợp với hầu hết các tình huống với quy tắc này. Sau đây là tất cả các trích dẫn Python hợp lệ:
' " ''' """Với nhiều khả năng này cho dấu phân cách, hầu hết mọi thứ đều có thể được thực hiện để làm việc. Về ngoại lệ duy nhất là nếu chuỗi theo nghĩa đen được cho là chứa một danh sách đầy đủ của tất cả các trích dẫn Python được phép.
Chuỗi thô trong thế giới thực (biến thể 2, như trong Python)
Python, tuy nhiên, có một tuyến đường khác bằng cách sử dụng một phiên bản mở rộng của quy tắc trên. Nó có hiệu quả
Nếu tôi đặt một R trước một cặp trích dẫn, tôi có thể đặt bất cứ điều gì tôi muốn giữa các trích dẫn miễn là nó không chứa một trích dẫn và nó sẽ có nghĩa là chính nó. Nếu tôi khăng khăng bao gồm một báo giá, thậm chí điều đó được cho phép, nhưng tôi phải đặt một dấu gạch chéo ngược trước đó.If I insist on including a quote, even that is allowed, but I have to put a backslash before it.
Vì vậy, cách tiếp cận Python, theo một nghĩa nào đó, thậm chí tự do hơn cả biến thể 1 ở trên - nhưng nó có tác dụng phụ của "Mis" giải thích trích dẫn đóng như một phần của chuỗi nếu ký tự dự định cuối cùng của chuỗi là dấu gạch chéo ngược.
Biến thể 2 không hữu ích:
- Nếu tôi muốn báo giá trong chuỗi của mình, nhưng không phải là dấu gạch chéo ngược, phiên bản cho phép của chuỗi theo nghĩa đen của tôi sẽ không phải là thứ tôi cần. Tuy nhiên, với ba loại trích dẫn khác mà tôi có theo ý của mình, có lẽ tôi sẽ chỉ chọn một trong số đó và vấn đề của tôi sẽ được giải quyết - vì vậy đây không phải là trường hợp có vấn đề.
However, given the three different other kinds of quotes I have at my disposal, I will probably just pick one of those and my problem will be solved -- so this is not problematic case. - Trường hợp có vấn đề là một trường hợp này: nếu tôi muốn chuỗi của mình kết thúc bằng một dấu gạch chéo ngược, tôi sẽ bị mất. Tôi cần phải dùng đến việc kết hợp một chuỗi không phải là raw theo nghĩa đen có chứa dấu gạch chéo ngược.
Sự kết luận
Sau khi viết bài này, tôi đi với một số áp phích khác mà biến thể 1 sẽ dễ hiểu hơn và chấp nhận và do đó có nhiều pythonic hơn. Đó là cuộc sống!
2017-08-08 & NBSP; 13: 24: 31
R.David.Murray2017-08-08 00:50 by gregory.p.smith, last changed 2022-04-11 14:58 by admin. This issue is now closed.
If i could stop thinking of r as meaning "raw" as we document it and instead "regular expression literal" I wouldn't make this mistake. :) Thanks everyone! |
________số 8 |
Lịch sử |
This may well be a "not a bug" resolution to preserve existing semantics that weren't what I expected. |
Yes, I'm closing as not-a-bug. It's been this way (and documented) forever. More specifically, as the docs say, a raw string can't end with an _odd_ number of backslashes: """ String quotes can be escaped with a backslash, but the backslash remains in the string; for example, r"\"" is a valid string literal consisting of two characters: a backslash and a double quote; r"\" is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character). """ |
In fact, this ia a FAQ: //docs.python.org/3/faq/design.html#why-can-t-raw-strings-r-strings-end-with-a-backslash |
If i could stop thinking of r as meaning "raw" as we document it and instead "regular expression literal" I wouldn't make this mistake. :) Thanks everyone! |
________số 8 |
________số 8 |
Người sử dụng | Hoạt động | Args | 2022-04-11 & NBSP; 14: 58: 49 |
quản trị viên | bộ | Args | 2022-04-11 & NBSP; 14: 58: 49 |
quản trị viên | bộ | Args | 2022-04-11 & NBSP; 14: 58: 49 messages: + msg336174 |
quản trị viên | bộ | Args | 2022-04-11 & NBSP; 14: 58: 49 |
quản trị viên | bộ | Args | 2022-04-11 & NBSP; 14: 58: 49 messages: + msg299918 |
quản trị viên | bộ | Args | 2022-04-11 & NBSP; 14: 58: 49 quản trị viên bộ |
GitHub: 75319 | bộ | Args | 2022-04-11 & NBSP; 14: 58: 49 |
quản trị viên | bộ | Args | 2022-04-11 & NBSP; 14: 58: 49 messages: + msg299889 |
quản trị viên | bộ | Args | 2022-04-11 & NBSP; 14: 58: 49 messages: + msg299885 |
quản trị viên | bộ | Args | 2022-04-11 & NBSP; 14: 58: 49 |
quản trị viên | bộ | GitHub: 75319 |