Hướng dẫn python raw string literal variable - biến chuỗi ký tự thô của python

>>> c = sys.stdin.readline()

>>> c == a
True
6 không phải là một hàm áp dụng cho các đối tượng chuỗi, đó là một công cụ sửa đổi áp dụng cho các chuỗi chữ. Nó thay đổi cách nghĩa đen được hiểu là một giá trị. Nhưng một khi đã hoàn thành, giá trị chỉ là một giá trị chuỗi cũ đơn giản. Đặc biệt:

>>> a = '\n'
>>> b = '''
... '''
>>> a == b
True

Vì vậy, nếu

>>> c = sys.stdin.readline()

>>> c == a
True
7 và
>>> c = sys.stdin.readline()

>>> c == a
True
8 có cùng giá trị, làm thế nào Python có thể biết rằng bạn muốn biến nó thành
>>> c = sys.stdin.readline()

>>> c == a
True
9?

Đối với vấn đề đó, hãy tưởng tượng điều này:

>>> c = sys.stdin.readline()

>>> c == a
True

Hoặc cái này:

>>> d = chr(10)
>>> d == a

Bạn không thể quay lại và giải thích lại chuỗi theo nghĩa đen như một chuỗi thô trong bất kỳ trường hợp nào khác trong số này trong

>>> c = sys.stdin.readline()

>>> c == a
True
8, nó sẽ không thay đổi, và trong
>>> d = chr(10)
>>> d == a
1 và
>>> d = chr(10)
>>> d == a
2 không có chuỗi theo nghĩa đen nào ngay từ đầu.


Nếu bạn muốn thoát khỏi tất cả các ký tự đặc biệt trong một giá trị chuỗi, mà không quan tâm đến nơi họ đến, bạn có thể làm điều đó bằng cách yêu cầu Python thoát khỏi chuỗi. Ví dụ:

>>> e = a.encode('unicode-escape').decode('ascii')

Nhưng bạn chắc chắn không muốn làm điều đó để xây dựng tên tệp để chuyển đến hàm

>>> d = chr(10)
>>> d == a
3.


Nếu bạn có một chuỗi theo nghĩa đen trong mã của mình và bạn muốn nó được coi là một chuỗi thô theo nghĩa đen, chỉ cần viết nó như một chuỗi thô theo nghĩa đen. Vì thế:

new_path=os.path.join(r'C:\foo', new_folder, file_to_copy)
source_file= new_path
destination= destination_folder

Thay vào đó, bạn có thể thoát khỏi dấu gạch chéo ngược theo nghĩa đen của mình hoặc sử dụng dấu gạch chéo về phía trước thay vì dấu gạch chéo ngược, v.v. Nhưng đó là tất cả những điều bạn làm theo nghĩa đen trước khi nó được đánh giá bởi Python, không phải là chuỗi sau khi thực tế.

Và làm thế nào để tránh những cơn ác mộng chao đảo trong Python, đặc biệt khi xác định các mẫu để sử dụng với các biểu thức thông thường

Ảnh của nhiếp ảnh gia chuyên nghiệp của Marco Verch trên Flickr (ngày 26 tháng 5 năm 2017).

Một chuỗi thô Python là một chuỗi có tiền tố theo nghĩa đen với một ký tự

>>> c = sys.stdin.readline()

>>> c == a
True
6 hoặc
>>> d = chr(10)
>>> d == a
5 [1]. Sử dụng chúng có thể xác định các nghĩa đen trong đó các dấu gạch chéo ngược được coi là ký tự theo nghĩa đen, do đó mất thuộc tính nhân vật trình tự thoát của chúng. Tính năng này đặc biệt hữu ích để viết các biểu thức chính quy hoặc được sử dụng với trình phân tích cú pháp SQL, ví dụ.raw string is a string literal prefixed either with an
>>> c = sys.stdin.readline()

>>> c == a
True
6 or an
>>> d = chr(10)
>>> d == a
5 character [1]. Using them makes it possible to define string literals in which backslashes are treated as literal characters, therefore loosing their escape sequences character property. This feature is particularly useful for writing regular expressions or to be used with SQL parsers, for example.

Xác định chữ cái thô

Hãy cùng xem xét các ví dụ sau đây cho thấy cách xác định một chuỗi thô theo nghĩa đen, so với định nghĩa của một chuỗi chuỗi bình thường bình thường:define a raw string literal, compared to the definition of a “normal” string literal:

s1 = 'Hello\nWorld'
print('s1:', s1)
s2 = r'Hello\nWorld'
print('s2:', s2)

Trong dòng đầu tiên, một chuỗi chữ bình thường của người Viking được sử dụng để khởi tạo biến

>>> d = chr(10)
>>> d == a
6. Trong dòng thứ ba, chuỗi ký tự tương tự được sử dụng để khởi tạo biến
>>> d = chr(10)
>>> d == a
7, nhưng lần này là một chuỗi thô theo nghĩa đen kể từ tiền tố
>>> c = sys.stdin.readline()

>>> c == a
True
6 đã được đặt trước khi trích dẫn bắt đầu của định nghĩa chuỗi. Kết quả thu được sau khi thực hiện bốn hướng dẫn là như sau:

s1: Hello
World
s2: Hello\nWorld

Trong định nghĩa của

>>> d = chr(10)
>>> d == a
6, ký tự dấu gạch chéo ngược được sử dụng để xác định trình tự thoát ____3030 đại diện cho ký tự dòng mới. Chuỗi chứa trong biến
>>> d = chr(10)
>>> d == a
6, do đó, bao gồm hai dòng.the escape sequence
>>> e = a.encode('unicode-escape').decode('ascii')
0 which represents the newline character. The string contained in the
>>> d = chr(10)
>>> d == a
6 variable, therefore, consists of two lines.

Trong định nghĩa của

>>> d = chr(10)
>>> d == a
7, ký tự dấu gạch chéo ngược không có vai trò đặc biệt nào. Nó chỉ đại diện cho ký tự
>>> e = a.encode('unicode-escape').decode('ascii')
3 được bao gồm trong chuỗi xác định, theo sau là ký tự
>>> e = a.encode('unicode-escape').decode('ascii')
4. Trình tự Escape
>>> e = a.encode('unicode-escape').decode('ascii')
0 chưa được giải thích nữa, hai ký tự của nó thuộc về chuỗi.the
>>> e = a.encode('unicode-escape').decode('ascii')
3 character that is included as-is in the defined string, followed by the
>>> e = a.encode('unicode-escape').decode('ascii')
4 character. The escape sequence
>>> e = a.encode('unicode-escape').decode('ascii')
0 has not been interpreted anymore, its two characters belong to the string.

Lưu ý rằng có thể xác định cùng một chuỗi với chuỗi trong biến

>>> d = chr(10)
>>> d == a
7, nhưng không sử dụng các chuỗi thô. Hướng dẫn không thể đọc được sau đây, sử dụng chuỗi
>>> e = a.encode('unicode-escape').decode('ascii')
7Scape đại diện cho một dấu gạch chéo ngược, nên đã được sử dụng:less readable instruction, using the
>>> e = a.encode('unicode-escape').decode('ascii')
7escape sequence which represents a backslash, should have been used:

s3 = 'Hello\\nWorld'

Tránh các chuỗi thô không hợp lệ

Có một số hạn chế khi xác định chuỗi thô. Không thể xác định một chuỗi chỉ bao gồm một ký tự

>>> e = a.encode('unicode-escape').decode('ascii')
8 với một chuỗi thô. Mã sau thực sự tạo ra lỗi cú pháp:some restrictions when defining raw strings. It is impossible to define a string only consisting of a single
>>> e = a.encode('unicode-escape').decode('ascii')
8 character with a raw string. The following code indeed produces a syntax error:

s = r'\'

Ngoài ra, một chuỗi thô theo nghĩa đen với một số ít các dấu gạch chéo ngược không hợp lệ. Ví dụ: mã sau đây tạo ra lỗi cú pháp:

s = r'\Hello\'

Cải thiện khả năng đọc

Các chuỗi thô nên được sử dụng thường xuyên nhất có thể vì chúng dẫn đến khả năng đọc mã tốt hơn bằng cách tránh sử dụng không cần thiết các dấu gạch chéo ngược để xác định các chuỗi thoát. Ví dụ: hãy giả sử bạn muốn xác định một biến chứa chuỗi sau:code readability by avoiding unnecessary use of backslashes to define escape sequences. For example, let’s assume you want to define a variable that contains the following string:

>>> c = sys.stdin.readline()

>>> c == a
True
0

Vì chuỗi mong muốn chứa các dấu gạch chéo ngược, chúng sẽ cần phải được thoát ra nếu sử dụng một chuỗi đơn giản của chuỗi bình thường. Ký tự mới được chèn vào chuỗi thoát

>>> e = a.encode('unicode-escape').decode('ascii')
0. Điều này dẫn đến hướng dẫn sau:escaped if using a “normal” string literal. The newline character is inserted with the
>>> e = a.encode('unicode-escape').decode('ascii')
0 escape sequence. This leads to the following instruction:

>>> c = sys.stdin.readline()

>>> c == a
True
1

Bằng cách xác định chữ ba chuỗi được trích xuất ba lần, có thể tránh việc sử dụng các dấu gạch chéo ngược và trình tự thoát

>>> e = a.encode('unicode-escape').decode('ascii')
0, làm cho mã dễ đọc hơn so với hướng dẫn được sử dụng ở trên:readable than with the instruction used above:

>>> c = sys.stdin.readline()

>>> c == a
True
2

Trên thực tế, ngay khi bạn có nhiều ký tự dấu gạch chéo ngược trong một chuỗi được định nghĩa là một chuỗi theo nghĩa đen, sử dụng các chuỗi thô sẽ cải thiện khả năng đọc của mã. Một ví dụ điển hình khác là định nghĩa của các đường dẫn Windows. Ví dụ sau đây cho thấy sự khác biệt có hoặc không có chuỗi thô:Windows paths. The following example shows the difference with or without raw strings:

>>> c = sys.stdin.readline()

>>> c == a
True
3

Sử dụng các chuỗi thô với các biểu thức thông thường

Cuối cùng, một trường hợp sử dụng hữu ích khác của các chuỗi thô là định nghĩa về các mẫu được sử dụng khi làm việc với các biểu thức thông thường [2]. Trong các mẫu như vậy, đặc biệt là ký tự dấu gạch chéo ngược được sử dụng rất nhiều để chỉ ra các ký tự đặc biệt. Không có chuỗi thô, các mẫu được định nghĩa là chuỗi chữ nhanh chóng trở nên lộn xộn.regular expressions [2]. In such patterns, the backslash character is heavily used, in particular, to indicate special characters. Without raw strings, patterns defined as string literals quickly become messy.

Hãy bắt đầu với, như một ví dụ đầu tiên, một mã tìm thấy tất cả các lệnh latex từ một chuỗi. Một lệnh latex hợp lệ là một chuỗi bắt đầu bằng ký tự dấu gạch chéo ngược theo sau là các chữ cái. Hướng dẫn thứ hai và thứ ba xác định biểu thức chính quy được sử dụng để tìm các lệnh latex:LaTeX command is a sequence starting with a backslash character followed by letters. The second and third instructions define the regular expression used to find the LaTeX commands:

>>> c = sys.stdin.readline()

>>> c == a
True
4

Như bạn có thể thấy, bốn dấu gạch chéo ngược là cần thiết! Chuỗi văn bản được khớp bao gồm một dấu gạch chéo ngược duy nhất

>>> e = a.encode('unicode-escape').decode('ascii')
8 theo sau là các chữ cái. Để chuyển nó đến hàm
new_path=os.path.join(r'C:\foo', new_folder, file_to_copy)
source_file= new_path
destination= destination_folder
2 của mô -đun
new_path=os.path.join(r'C:\foo', new_folder, file_to_copy)
source_file= new_path
destination= destination_folder
3, dấu gạch chéo ngược phải được thoát ra, dẫn đến chuỗi ____37. Cuối cùng, để xác định trình tự này trong một chuỗi chữ bình thường của người Viking, mỗi dấu gạch chéo ngược phải được thoát ra, dẫn đến bốn dấu gạch chéo ngượcfour backslashes are needed! The text string to be matched consists of a single backslash
>>> e = a.encode('unicode-escape').decode('ascii')
8 followed by letters. To pass it to the
new_path=os.path.join(r'C:\foo', new_folder, file_to_copy)
source_file= new_path
destination= destination_folder
2 function of the
new_path=os.path.join(r'C:\foo', new_folder, file_to_copy)
source_file= new_path
destination= destination_folder
3 module, the backslash has to be escaped, leading to the
>>> e = a.encode('unicode-escape').decode('ascii')
7 sequence. Finally, to define this sequence in a “normal” string literal, each backslash has to be escaped, resulting in the four backslashes…

Sử dụng một nửa chuỗi thô theo nghĩa đen, số lượng dấu gạch chéo ngược để sử dụng:

>>> c = sys.stdin.readline()

>>> c == a
True
5

Nhiều chuỗi đặc biệt khác có thể được sử dụng khi xác định các biểu thức chính quy, chẳng hạn như

new_path=os.path.join(r'C:\foo', new_folder, file_to_copy)
source_file= new_path
destination= destination_folder
5 để phù hợp với bất kỳ chữ số thập phân Unicode hoặc
new_path=os.path.join(r'C:\foo', new_folder, file_to_copy)
source_file= new_path
destination= destination_folder
6 để phù hợp với bất kỳ ký tự nào về khoảng trắng Unicode. Không cần sử dụng các chuỗi chữ RAW, các dấu gạch chéo ngược cần phải được nhân đôi, dẫn đến mã không dễ đọc.

Để kết luận, ngôn ngữ lập trình Python bao gồm khả năng xác định các chữ cái thô, trong đó các dấu gạch chéo ngược được coi là ký tự theo nghĩa đen và không được sử dụng để xác định các chuỗi thoát. Sử dụng tính năng này rất được khuyến khích vì nó làm tăng khả năng đọc mã trong nhiều tình huống.raw string literals, where backslashes are treated as literal characters and not used to define escape sequences. Using this feature is highly recommended as it does increase the code readability in many situations.

Bất cứ khi nào bạn cần xác định các chuỗi chữ có chứa nhiều dấu gạch chéo ngược, hãy nghĩ về một chuỗi thô theo nghĩa đen. Điều này đặc biệt đúng khi bạn cần xác định các chuỗi được sử dụng bởi trình phân tích cú pháp, chẳng hạn như các biểu thức thông thường chẳng hạn.

Người giới thiệu

. Quỹ phần mềm Python, biểu thức thường xuyên Howto Py Python 3.9.6, được lấy vào ngày 22 tháng 7 năm 2021.
[2] Python Software Foundation, Regular Expression HOWTO—Python 3.9.6 Documentation, retrieved on July 22, 2021.

Thêm nội dung tại Plainenglish.ioplainenglish.io

Làm thế nào để bạn chuỗi thô một biến trong Python?

Trong Python, khi bạn đặt trước một chuỗi với chữ R hoặc r, chẳng hạn như r '...' và r '...', chuỗi đó trở thành một chuỗi thô. Không giống như một chuỗi thông thường, một chuỗi thô coi các dấu gạch chéo ngược (\) là các ký tự nghĩa đen.when you prefix a string with the letter r or R such as r'...' and R'...' , that string becomes a raw string. Unlike a regular string, a raw string treats the backslashes ( \ ) as literal characters.

Một chuỗi có thể là một theo nghĩa đen trong Python?

Chuỗi chữ trong Python được bao quanh bởi các dấu ngoặc kép đơn hoặc dấu ngoặc kép. 'Xin chào' giống như "Xin chào".. 'hello' is the same as "hello".

Chuỗi thô là nghĩa đen là gì?

Chuỗi thô theo nghĩa đen trong C ++ Một nghĩa đen là một biến không đổi có giá trị không thay đổi trong suốt vòng đời của chương trình. Trong khi đó, một chuỗi thô theo nghĩa đen là một chuỗi trong đó các ký tự thoát như '\ n, \ t hoặc \' '' của C ++ không được xử lý. Do đó, một chuỗi thô theo nghĩa đen bắt đầu bằng r R (và kết thúc bằng).a string in which the escape characters like ' \n, \t, or \” ' of C++ are not processed. Hence, a raw string literal that starts with R”( and ends in )”.

Chuỗi thô trong Python là gì?

Trong Python, các chuỗi có tiền tố R hoặc R, chẳng hạn như R '...' và R "...", được gọi là chuỗi thô và coi dấu gạch chéo ngược \ là ký tự theo nghĩa đen.Chuỗi thô rất hữu ích khi xử lý các chuỗi sử dụng nhiều dấu gạch chéo ngược, chẳng hạn như đường dẫn Windows và các mẫu biểu thức thông thường.strings prefixed with r or R , such as r'...' and r"..." , are called raw strings and treat backslashes \ as literal characters. Raw strings are useful when handling strings that use a lot of backslashes, such as Windows paths and regular expression patterns.

Làm thế nào để bạn chuyển đổi một chuỗi bình thường thành một chuỗi thô trong Python?

Chỉ cần sử dụng hàm mã hóa.Sau đây không làm cho chuỗi thô mà thay vào đó mã hóa nó thành byte và giải mã nó.str.Mã hóa mã hóa chuỗi thành byte, nó không tạo ra một chuỗi thô, đây là một chuỗi trong đó một dấu gạch chéo ngược được xử lý theo nghĩa đen, không phải là một ký tự thoát.