Рядкові та байтові літерали

Оновлено: 28.04.2023

Рядкові літерали описуються такими лексичними визначеннями:

stringliteral   ::=  [stringprefix](shortstring | longstring)
stringprefix    ::=  "r" | "u" | "R" | "U" | "f" | "F"
                     | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
shortstring     ::=  "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring      ::=  "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::=  shortstringchar | stringescapeseq
longstringitem  ::=  longstringchar | stringescapeseq
shortstringchar ::=  <any source character except "\" or newline or the quote>
longstringchar  ::=  <any source character except "\">
stringescapeseq ::=  "\" <any source character>
bytesliteral   ::=  bytesprefix(shortbytes | longbytes)
bytesprefix    ::=  "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
shortbytes     ::=  "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes      ::=  "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::=  shortbyteschar | bytesescapeseq
longbytesitem  ::=  longbyteschar | bytesescapeseq
shortbyteschar ::=  <any ASCII character except "\" or newline or the quote>
longbyteschar  ::=  <any ASCII character except "\">
bytesescapeseq ::=  "\" <any ASCII character>

Одне синтаксичне обмеження, яке не вказується цими продуктами, полягає в тому, що пробіли не допускаються між stringprefix або bytesprefix та рештою літералу. Вихідний набір символів визначається оголошенням кодування; це UTF-8, якщо у вихідному файлі не вказано кодування; див. розділ Оголошення кодування.

In plain English: Both types of literals can be enclosed in matching single quotes (') or double quotes ("). They can also be enclosed in matching groups of three single or double quotes (these are generally referred to as triple-quoted strings). The backslash (\) character is used to escape characters that otherwise have a special meaning, such as newline, backslash itself, or the quote character.

Байтові літерали завжди мають префікс 'b' або 'B'; вони створюють екземпляр типу bytes замість типу str. Вони можуть містити лише символи ASCII; байти з числовим значенням 128 або більше повинні бути виражені за допомогою екранованих символів.

І рядкові, і байтові літерали можуть додатково мати префікс 'r' або 'R'; такі рядки називаються raw strings і розглядають зворотні косі риски як буквальні символи. Як наслідок, у рядкових літералах екранування '\U' і '\u' у необроблених рядках не обробляються спеціально. Враховуючи те, що необроблені літерали Unicode Python 2.x поводяться інакше, ніж Python 3.x, синтаксис 'ur' не підтримується.

Рядковий літерал із 'f'' або 'F'' у своєму префіксі є formatted string literal; див. Відформатовані рядкові літерали. 'f' можна поєднувати з 'r', але не з 'b'' або 'u'', тому можливі необроблені форматовані рядки, але форматовані байтові літерали не є.

У літералах із потрійними лапками дозволені (і зберігаються) неекрановані нові рядки та лапки, за винятком того, що три неекрановані лапки поспіль завершують літерал. («Лапка» - це символ, який використовується для відкриття літералу, тобто ' або ".)

Якщо немає префікса 'r' або 'R', керуючі послідовності в рядкових і байтових літералах інтерпретуються відповідно до правил, подібних до тих, що використовуються стандартом C. Розпізнаними керуючими послідовностями є:

Ескейп-послідовність

Значення

Примітки

\<newline>

Зворотна коса риска та новий рядок ігноруються

(1)

\\

Зворотна коса риска (\)

\''

Одинарні лапки (')

\"

Подвійні лапки (")

\a

ASCII Bell (BEL)

\b

ASCII Backspace (BS)

\f

ASCII Formfeed (FF)

\n

ASCII Linefeed (LF)

\r

ASCII повернення каретки (CR)

\t

Горизонтальна вкладка ASCII (TAB)

\v

Вертикальна вкладка ASCII (VT)

\ооо

Символ із вісімковим значенням ooo

(2,4)

\xhh

Символ із шістнадцятковим значенням hh

(3,4)

Екран-послідовності, розпізнані лише в рядкових літералах:

Ескейп-послідовність

Значення

Примітки

\N{name}

Символ із назвою name у базі даних Unicode

(5)

\uxxxx

Символ із 16-бітним шістнадцятковим значенням xxxx

(6)

\Uxxxxxxxxx

Символ із 32-розрядним шістнадцятковим значенням xxxxxxx

(7)

Примітки:

A backslash can be added at the end of a line to ignore the newline: >>> >>> 'This string will not include \ ... backslashes or newline characters.' 'This string will not include backslashes or newline characters.' The same result can be achieved using triple-quoted strings, or parentheses and string literal concatenation. Як і в стандарті C, допускається до трьох вісімкових цифр. Змінено в версії 3.11: Octal escapes with value larger than 0o377 produce a DeprecationWarning. In a future Python version they will be a SyntaxWarning and eventually a SyntaxError. На відміну від стандарту C, потрібні рівно дві шістнадцяткові цифри. У байтовому літералі шістнадцяткове та вісімкове екранування позначають байт із заданим значенням. У рядковому літералі ці екрановані символи позначають символ Unicode із заданим значенням. Змінено в версії 3.3: Додано підтримку псевдонімів 1. Потрібні рівно чотири шістнадцяткові цифри. Таким чином можна закодувати будь-який символ Unicode. Необхідно рівно вісім шістнадцяткових цифр.

>>> 'This string will not include \
... backslashes or newline characters.'
'This string will not include backslashes or newline characters.'

На відміну від стандартного C, усі нерозпізнані керуючі послідовності залишаються в рядку без змін, тобто зворотний слеш залишається в результаті. (Ця поведінка корисна під час налагодження: якщо escape-послідовність введена неправильно, результат легше розпізнати як несправний.) Важливо також зазначити, що escape-послідовності, розпізнані лише в рядкових літералах, належать до категорії нерозпізнаних escape-сигналів для байтів. літерали.

Навіть у необробленому літералі лапки можна екранувати за допомогою зворотної косої риски, але зворотна коса риска залишається в результаті; наприклад, r"\"" є дійсним рядковим літералом, що складається з двох символів: зворотної косої риски та подвійних лапок; r"\" не є дійсним рядковим літералом (навіть необроблений рядок не може закінчуватися у непарній кількості зворотних скісних рисок). Зокрема, необроблений літерал не може закінчуватися однією зворотною скісною рискою (оскільки зворотна скісна риска виключатиме наступний символ лапок). Зауважте також, що одна зворотна скісна риска, за якою йде новий рядок, інтерпретується як ці два символи як частина літералу, не як продовження рядка.