Python/Справочник по языку Python 3.1: различия между версиями
Содержимое удалено Содержимое добавлено
Hittih (обсуждение | вклад) Продолжение перевода |
Hittih (обсуждение | вклад) Продолжение перевода |
||
Строка 318:
:Частные имена класса. Имена этой категории, при использовании в рамках определения класса, автоматически модифицируются, чтобы избежать конфликтов имен между «частными» атрибутами базовых и производных классов. Смотрите в разделе «Идентификаторы (Имена)» .
== 2.4. «Литералы» ==
«Литералы» - это непосредственная запись постоянных значений некоторых встроенных типов.
=== 2.4.1. Текстовые («String») и байтовые («Bytes») «литералы» ===
Непосредственная запись текстовых данных имеет следующее лексическое определение:
stringliteral ::= [stringprefix](shortstring | longstring)
stringprefix ::= "r" | "R"
shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring ::= "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::= shortstringchar | stringescapeseq
longstringitem ::= longstringchar | stringescapeseq
shortstringchar ::= <любой символ программы, кроме "\" или newline или закрывающей кавычки>
longstringchar ::= <любой символ программы, кроме "\">
stringescapeseq ::= "\" <любой символ программы>
bytesliteral ::= bytesprefix(shortbytes | longbytes)
bytesprefix ::= "b" | "B" | "br" | "Br" | "bR" | "BR"
shortbytes ::= "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes ::= "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::= shortbyteschar | bytesescapeseq
longbytesitem ::= longbyteschar | bytesescapeseq
shortbyteschar ::= <любой символ ASCII, кроме "\" или newline или закрывающей кавычки>
longbyteschar ::= <любой символ ASCII, кроме "\">
bytesescapeseq ::= "\" <любой символ ASCII>
Есть также одно синтаксическое ограничение, не отмеченное в этих определениях: знаки пробелов (пробела, табуляции, перевода страницы) не могут находится между строковым или байтовым префиксом и остальной частью «литерала» . Набор символов кода программы определяется объявлением кодировки, по умолчанию: UTF-8, смотрите раздел «Объявление кодировки» .
Говоря проще : оба типа «литералов» обрамляются с двух сторон одинаковыми кавычками :
или по одной одинарной «'» , или по одной двойной «"» , или по три одинарных «'''» , или по три двойных «"""» (утроенные кавычки) . Символ бэкслэш «\» используется для «экранирования» (вставки в качестве простых печатных) символов, которые в других случаях имеют особое значение, такие как знак новой строки, сам бэкслэш или кавычки.
Строковые литералы могут опционально начинаться с букв «r» или «R» ; такие строки называются «сырыми» («raw»), и считают бэкслэш обычным символом. В результате последовательности «\U» и «\u» специального значения в «сырых» строках не имеют.
Байтовым «литералам» должен предшествовать префикс «b» или «B» . Они создают экземпляр типа «bytes» вместо типа «str» . Этот тип может содержать только символы ASCII; байты с численным значением больше 127 записываются с помощью особых последовательностей символов.
В текстовых данных в утроенных кавычках – могут присутствовать (и сохраняются как есть) «неэкранированные» знаки новой строки и кавычки (не в виде специальных последовательностей) , кроме трех «неэкранированных» кавычек подряд (того же вида, как и открывавшие), которые завершают запись текста.
Если нет префикса «r» или «R» , специальные последовательности в строках интерпретируются согласно правилам стандартного «C» . Опознаются следующие специальные последовательности:
{| class="standard"
!спец.<br /> последовательность||значение||примечание
|-
|\newline||и бэкслэш и символ<br /> новой строки отбрасываются||
|-
|\\||бэкслэш (\)||
|-
|\'||одинарная кавычка (')||
|-
|\"||двойная кавычка (")||
|-
|\a||ASCII Bell (BEL)||
|-
|\b||ASCII Backspace (BS)||
|-
|\f||ASCII Formfeed (FF)||
|-
|\n||ASCII Linefeed (LF)||
|-
|\r||ASCII Carriage Return (CR)||
|-
|\t||ASCII Horizontal Tab (TAB)||
|-
|\v||ASCII Vertical Tab (VT)||
|-
|\ooo||символ с 8-ричным<br /> значением ooo||(1,3)
|-
|\xhh||символ с 16-ричным<br /> значением hh||(2,3)
|-
|}
Следующие специальные последовательности опознаются только в текстовых данных:
{| class="standard"
!спец.<br /> последовательность||значение||примечание
|-
|\N{name}||Символ с именем name в базе Unicode||
|-
|\uxxxx||Символ с 16-битным<br /> 16-ричным значением xxxx||(4)
|-
|\Uxxxxxxxx||Символ с 32-битным<br /> 16-ричным значением xxxxxxxx||(5)
|-
|}
:1. Как и в стандартном «C» , принимается до трех восьмеричных знаков.
:2. В отличие от стандартного «C» , принимается строго два 16-ричных знака.
:3. В байтовых данных 16- и 8-ричные специальные последовательности обозначают байт с данным значением. В текстовых данных они обозначают символ Юникода с данным кодом.
:4. Отдельные коды, составляющие части суррогатной пары, могут быть закодированы при помощи специальных последовательностей. В отличие от стандартного «C» , требуется строго два 16-ричных знака.
:5. Этим способом могут быть закодированы любые символы Юникода, но символы вне «Basic Multilingual Plane» (BMP) будут закодированы с помощью суррогатной пары, если Питон скомпилирован под использование 16-битных элементов кода Юникод (по умолчанию). Отдельные коды, составляющие части суррогатной пары, могут быть закодированы при помощи специальных последовательностей.
В отличие от стандартного «C» , все неопознанные последовательности символов оставляются в тексте неизменными, т. е. бэкслэш остается в тексте. (Такое поведение полезно при отладке: если особая последовательность символов написана неправильно, то в том, что появляется на выходе легче заметить ошибку.) Кроме того, важно отметить, что управляющие последовательности опознающиеся только в записи текста попадают в категорию неопознанных последовательностей в записи байтовых данных.
Даже в «сыром» тексте кавычки могут быть вставлены через бэкслэш, но бэкслэш остается в строке, например, «r"\""»является верной текстовой записью, состоящей из двух символов: бэкслэш и двойные кавычки; «r"\"» не является допустимой записью (даже «сырой» текст не может заканчиваться нечётным количеством бэкслэшей). В частности, «сырой» текст не может оканчиваться одним бэкслэшем (поскольку бэкслэш превращает следующую за ним кавычку в текст). Отметьте также, что один бэкслэш подряд, за которым сразу следует переход на новую строку интерпретируется как эти два символа, являющиеся частью строки, а не как продолжение строки.
== Продолжение перевода ==
<small>Перевод происходит, например, на : "http://notabenoid.com/book/5672/" ...</small>
<!--
2.4.2. String literal concatenation¶
|