The Python Language Reference / Справочник по языку Python: 2. Lexical analysis

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Примечание:

vanderloos 07.07.10 в 10:00

0

Имя _ часто используется всвязи с интернационализацией, см. документацию модуля gettext для получения информации по этой договоренности.

__*__
Определенные системой имена. Эти имена определяются интерпретатором и его реализацией (включая стандартную библиотеку). Приложения не должны определять дополнительные имена использую эту форму. Набор имен этого класса, определенных в Python, может быть расширен в будущих версиях. См. раздел "Имена специальных методов".

__*
Частные имена класса. Имена этой категории, при использовании в рамках определения класса, переписываются с использованием измененной формы, чтобы избежать конфликтов имен между "частными" атрибутами базовых и производных классов. См. в разделе "Идентификаторы (Имена)".

vanderloos 07.07.10 в 10:17

0

Имя «_» часто используется в связи с интернационализацией, смотрите документацию модуля «gettext» для получения информации по этой договоренности.

«__*__»
Определенные системой имена. Эти имена определяются интерпретатором и его реализацией (включая стандартную библиотеку). Приложения не должны определять дополнительные имена используя эту форму. Набор имен этого класса, определенных в Питоне, может быть расширен в будущих версиях. Смотрите раздел «Имена специальных методов» .

«__*»
Частные имена класса. Имена этой категории, при использовании в рамках определения класса, автоматически модифицируются, чтобы избежать конфликтов имен между «частными» атрибутами базовых и производных классов. Смотрите в разделе «Идентификаторы (Имена)».

Hittih 23.08.10 в 13:48

0

2.4. Литералы
Литералы - это обозначения постоянных значений некоторых встроенных типов.

vanderloos 07.07.10 в 10:19

0

2.4. «Литералы»
«Литералы» - это непосредственная запись постоянных значений некоторых встроенных типов данных.

Hittih 23.08.10 в 22:33

0

2.4.1. Строковые (String) и Байтовые (Bytes) литералы
Строковые литералы описываются следующим лексическим определением:

vanderloos 07.07.10 в 10:23

0

2.4.1. Текстовые («String») и байтовые («Bytes») «литералы»
Непосредственная запись текстовых данных имеет следующее лексическое определение:

Hittih 23.08.10 в 22:44

0

stringliteral ::= [stringprefix](shortstring | longstring)
stringprefix ::= "r" | "R"
shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring ::= "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::= shortstringchar | stringescapeseq
longstringitem ::= longstringchar | stringescapeseq
shortstringchar ::= <any source="source" character="character" except="except" or="or" newline="newline" the="the" quote="quote">
longstringchar ::= <any source="source" character="character" except="except">
stringescapeseq ::= "\" <any source="source" character="character"></any></any></any>

vanderloos 07.07.10 в 10:24

0

stringliteral ::= [stringprefix](shortstring | longstring)
stringprefix ::= "r" | "R"
shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring ::= "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::= shortstringchar | stringescapeseq
longstringitem ::= longstringchar | stringescapeseq
shortstringchar ::= &lt;любой символ программы, кроме "\" или newline или закрывающей кавычки&gt;
longstringchar ::= &lt;любой символ программы, кроме "\"&gt;
stringescapeseq ::= "\" &lt;любой символ программы&gt;

Hittih 23.08.10 в 22:57

0

bytesliteral ::= bytesprefix(shortbytes | longbytes)
bytesprefix ::= "b" | "B"
shortbytes ::= "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes ::= "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::= shortbyteschar | bytesescapeseq
longbytesitem ::= longbyteschar | bytesescapeseq
shortbyteschar ::= <any ascii="ascii" character="character" except="except" or="or" newline="newline" the="the" quote="quote">
longbyteschar ::= <any ascii="ascii" character="character" except="except">
bytesescapeseq ::= "\" <any ascii="ascii" character="character"></any></any></any>

vanderloos 07.07.10 в 10:24

0

bytesliteral ::= bytesprefix(shortbytes | longbytes)
bytesprefix ::= "b" | "B" | "br" | "Br" | "bR" | "BR"
shortbytes ::= "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes ::= "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::= shortbyteschar | bytesescapeseq
longbytesitem ::= longbyteschar | bytesescapeseq
shortbyteschar ::= &lt;любой символ ASCII, кроме "\" или newline или закрывающей кавычки&gt;
longbyteschar ::= &lt;любой символ ASCII, кроме "\"&gt;
bytesescapeseq ::= "\" &lt;любой символ ASCII&gt;

Hittih 23.08.10 в 23:09

0

Есть также одно синтаксическое ограничение, не отмеченное в этих условиях: знаки пробелов (пробела, табуляции, перевода страницы) не могут находится между строковой или байтовой приставкой и остальной частью литерала. Набор исходных символов определяется объявлением кодировки, по умолчанию: UTF-8, см. раздел "Объявление кодировки".

vanderloos 07.07.10 в 10:31

0

Есть также одно синтаксическое ограничение, не отмеченное в этих определениях: знаки пробелов (пробела, табуляции, перевода страницы) не могут находится между строковым или байтовым префиксом и остальной частью «литерала» . Набор символов кода программы определяется объявлением кодировки, по умолчанию: UTF-8, смотрите раздел «Объявление кодировки» .

Hittih 23.08.10 в 23:33

0

Простым языком: Оба типа литералов могут быть включены в одинарные кавычки (') или двойные кавычки ("). Также они могут быть включены в группы из трех двойных или одинарных кавычек (они обычно называются строки в тройных кавычках). Символ бэкслеш (\) используется для экранирования символов, которые в других случаюх имеют особое значение, такие как знак новой строки, сам бэкслеш или кавычки.

vanderloos 07.07.10 в 10:38

0

Говоря проще : оба типа «литералов» обрамляются с двух сторон одинаковыми кавычками : или по одной одинарной «'» , или по одной двойной «"» , или по три одинарных «'''» , или по три двойных «"""» (утроенные кавычки) . Символ бэкслэш «\» используется для «экранирования» (вставки в качестве простых печатных) символов, которые в других случаях имеют особое значение, такие как знак новой строки, сам бэкслэш или кавычки.

Hittih 24.08.10 в 00:22

0

Строковые литералы могут опционально начинаться с букв 'r' или 'R'; такие строки называются "сырыми" ("raw"), и считают бэкслеш обычным символом.
В результате символы '\U' и '\u' специального значения в сырых строках не имеют.

vanderloos 07.07.10 в 10:52

0

Строковые литералы могут опционально начинаться с букв «r» или «R» ; такие строки называются «сырыми» («raw»), и считают бэкслэш обычным символом.
В результате последовательности «\U» и «\u» специального значения в «сырых» строках не имеют.

Hittih 24.08.10 в 00:29

0

Байтовым литералам должна предшествовать приставка 'b' или 'B'. Они создают экземпляр типа bytes вместо типа str. Этот тип может содержать только символы ASCII; если численное значение превышает или равно 128, то строка должна быть экранирована.

vanderloos 07.07.10 в 11:51

0

Байтовым «литералам» должен предшествовать префикс «b» или «B» . Они создают экземпляр типа «bytes» вместо типа «str» . Этот тип может содержать только символы ASCII; байты с численным значением больше 127 записываются с помощью особых последовательностей символов.

Hittih 24.08.10 в 00:49

0

В строках в тройных кавычках могут присутствовать (и сохраняются как есть) неэкранированные знаки новой строки и кавычки, кроме трех неэкранированных кавычек подряд, которые завершают строку. ("Кавычка" - это символ начала строки (значения со строковым типом), т.е. ' или ".)

vanderloos 07.07.10 в 12:30

0

В текстовых данных в утроенных кавычках – могут присутствовать (и сохраняются как есть) «неэкранированные» знаки новой строки и кавычки (не в виде специальных последовательностей) , кроме трех «неэкранированных» кавычек подряд (того же вида, как и открывавшие), которые завершают запись текста.

Hittih 24.08.10 в 01:17

0

Если нет приставки 'r' или 'R', последовательности экранирования в строках обрабатываются согласно правилам стандартного C. Существуют следующие последовательности экранирования:
Escape Sequence Meaning Notes
\newline Игнорируется бэкслеш и newline
\\ Бэкслеш (\)
\' Одинарная кавычка (')
\" Двойная кавычка (")
\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 Символ с восьмиричным значением ooo (1,3)
\xhh Символ с 16-ричным значением hh (2,3)

vanderloos 07.07.10 в 12:51

0

Если нет префикса «r» или «R» , специальные последовательности в строках интерпретируются согласно правилам стандартного «C» . Опознаются следующие специальные последовательности:
Escape Sequence Meaning Notes
\newline Игнорируется бэкслеш и newline
\\ Бэкслеш (\)
\' Одинарная кавычка (')
\" Двойная кавычка (")
\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 Символ с восьмиричным значением ooo (1,3)
\xhh Символ с 16-ричным значением hh (2,3)

Hittih 24.08.10 в 01:29

0

Последовательности экранирования для строковых литералов:
Escape Sequence Meaning Notes
\N{name} Символ с именем name в базе Unicode
\uxxxx Символ с 16-битным hex значением xxxx (4)
\Uxxxxxxxx Символ с 32-битным hex значением xxxxxxxx (5)

vanderloos 07.07.10 в 12:55

0

Примечания:

vanderloos 07.07.10 в 12:58

0

1. Как и в стандартном C, принимается до трех восьмиричных знаков.
2. В отличие от стандартного C, принимается до двух 16-ричных знаков.
3. В байтовом литерале 16- и 8-ричные знаки экранирования обозначают байт с данным значением. В строковом литерале эти знаки обозначают символ Unicode с данным кодом.
4. Отдельные блоки кода, составляющие части суррогатной пары, могут быть закодированы при помощи этой последовательности экранирования. В отличие от стандартного C, требуется именно два 16-ричных знака.
5. Этим способом могут быть закодированы любые Unicode символы, но символы вне Basic Multilingual Plane (BMP) будут закодированы с помощью суррогатной пары, если Python скомпилирован под использование 16-битных блоков кода (по умолчанию). Отдельные блоки кода, составляющие части суррогатной пары, могут быть закодированы при помощи этой последовательности экранирования.

vanderloos 07.07.10 в 13:20

0

1. Как и в стандартном «C» , принимается до трех восьмеричных знаков.
2. В отличие от стандартного «C» , принимается строго два 16-ричных знака.
3. В байтовых данных 16- и 8-ричные специальные последовательности обозначают байт с данным значением. В текстовых данных они обозначают символ Юникода с данным кодом.
4. Отдельные коды, составляющие части суррогатной пары, могут быть закодированы при помощи специальных последовательностей. В отличие от стандартного «C» , требуется строго два 16-ричных знака.
5. Этим способом могут быть закодированы любые символы Юникода, но символы вне «Basic Multilingual Plane» (BMP) будут закодированы с помощью суррогатной пары, если Питон скомпилирован под использование 16-битных элементов кода Юникод (по умолчанию). Отдельные коды, составляющие части суррогатной пары, могут быть закодированы при помощи специальных последовательностей.

Hittih 24.08.10 в 02:55

0

В отличие от стандартного C, все нераспознанные последовательности экранирования оставляются в строке без изменения, т.е. бэкслеш остается в строке. (Такое поведение может быть полезно при отладке: если какая-то последовательность экранирования неправильно написана, легче определить, что результат неверный). Важно также отметить, что последовательности действующие только для строковых литералов, попадают в категорию нераспознанных для байтовых литералов.

vanderloos 08.07.10 в 08:52

0

В отличие от стандартного «C», все неопознанные последовательности символов оставляются в тексте неизменными, т. е. бэкслэш остается в тексте. (Такое поведение полезно при отладке: если особая последовательность символов написана неправильно, то в том, что появляется на выходе легче заметить ошибку.) Кроме того, важно отметить, что управляющие последовательности опознающиеся только в записи текста попадают в категорию неопознанных последовательностей в записи байтовых данных.

Hittih 08.07.10 в 12:33

0

Даже в «сыром» тексте кавычки могут быть вставлены через бэкслэш, но бэкслэш остается в строке, например, «r"\""»является верной текстовой записью, состоящей из двух символов: бэкслэш и двойные кавычки; «r"\"» не является допустимой записью (даже «сырой» текст не может заканчиваться нечётным количеством бэкслэшей). В частности, «сырой» текст не может оканчиваться одним бэкслэшем (поскольку бэкслэш превращает следующую за ним кавычку в текст). Отметьте также, что один бэкслэш подряд, за которым сразу следует переход на новую строку интерпретируется как эти два символа, являющиеся частью строки, а не как продолжение строки.

Hittih 07.07.10 в 14:33

0

2.4.2. Соединение текстовых записей (литералов)
Допустимы несколько идущих подряд текстовых записей, разделённых пробелами (возможно, с использованием разных типов пар кавычек) - их значение эквивалентно значению одной текстовой записи, являющейся их соединением. Таким образом, "hello" 'world' эквивалентно "helloworld". Эта особенность позволяет уменьшать количество необходимых бэкслэшей, удобно разделять длинные тексты на много физических строк, или даже добавлять комментарии к отдельным фрагментам текста, например:

Hittih 07.07.10 в 15:33

0

re.compile("[A-Za-z_]" # буква или подчёркивание
"[A-Za-z0-9_]*" # буква, цифра или подчёркивание
)

Hittih 08.07.10 в 12:05

0

Обратите внимание, что это свойство определено на синтаксическом уровне, но реализуется во время компиляции. Для соединения фрагментов текста во время исполнения – должен использоваться оператор «+» . Заметьте также, что при соединении текста могут использоваться различные стили оформления для каждого фрагмента (даже смешивание «сырого» текста и в тройных кавычках) .

Hittih 07.07.10 в 16:30

0

2.4.3. Непосредственная запись чисел
Существуют три формы непосредственной записи для чисел: целых, чисел с плавающей точкой, и мнимых чисел. Не существует непосредственной записи для комплексных чисел (они могут быть сформированы через операцию сложения действительного числа с мнимым).

Hittih 07.07.10 в 16:47

0

Заметьте, что знак не является частью записи числа - такая формулировка, как «-1» , на самом деле является выражением, состоящим из унарного оператора «-» и числа «1» .

Hittih 07.07.10 в 16:55

0

2.4.4. Запись целых чисел
Запись целых чисел имеет следующее лексическое определение:

Hittih 07.07.10 в 17:03

0

integer ::= decimalinteger | octinteger | hexinteger | bininteger
decimalinteger ::= nonzerodigit digit* | "0"+
nonzerodigit ::= "1"..."9"
digit ::= "0"..."9"
octinteger ::= "0" ("o" | "O") octdigit+
hexinteger ::= "0" ("x" | "X") hexdigit+
bininteger ::= "0" ("b" | "B") bindigit+
octdigit ::= "0"..."7"
hexdigit ::= digit | "a"..."f" | "A"..."F"
bindigit ::= "0" | "1"

Hittih 08.07.10 в 12:00

0

Нет ограничения длины записи числа, кроме размера доступной памяти.

Hittih 07.07.10 в 17:13

0

Обратите внимание, что нули в начале ненулевого десятичного числа не допускаются. Это сделано для отличения их от восьмеричной записи в стиле «C» , которая использовалась в Питоне до версии 3.0 .

Hittih 07.07.10 в 17:26

0

Некоторые примеры записи целых чисел:

Hittih 07.07.10 в 17:27

0

7 2147483647 0o177 0b100110111
3 79228162514264337593543950336 0o377 0x100000000
79228162514264337593543950336 0xdeadbeef

Hittih 08.07.10 в 12:00

0

2.4.5. Запись дробных чисел (с плавающей запятой)
Запись дробных чисел имеет следующее лексическое определение:

Hittih 07.07.10 в 17:31

0

floatnumber ::= pointfloat | exponentfloat
pointfloat ::= [intpart] fraction | intpart "."
exponentfloat ::= (intpart | pointfloat) exponent
intpart ::= digit+
fraction ::= "." digit+
exponent ::= ("e" | "E") ["+" | "-"] digit+

Hittih 08.07.10 в 12:00

0

Заметьте, что в целой и экспонентной частях всегда подразумевается основание 10 . Например, 077e010 является допустимым и значит то же, что и 77e10 . Допустимый диапазон дробных чисел может различаться в разных реализациях. Примеры записи дробных чисел:

Hittih 07.07.10 в 17:43

0

3.14 10. .001 1e100 3.14e-10 0e0

Hittih 08.07.10 в 11:59

0

Заметьте, что знак не является частью записи числа - такая формулировка, как «-1» , на самом деле является выражением, состоящим из унарного оператора «-» и числа «1» .

Hittih 07.07.10 в 17:45

0

2.4.6. Запись мнимых чисел
Запись мнимых чисел имеет следующее лексическое определение:

Hittih 07.07.10 в 17:47

0

imagnumber ::= (floatnumber | intpart) ("j" | "J")

Hittih 08.07.10 в 11:58

0

Под мнимое число отводится комплексное число с действительной частью «0» . Комплексные числа представлены в виде пары чисел с плавающей точкой, которые имеют обычные ограничения диапазона их значений. Чтобы создать комплексное число с ненулевой действительной частью, нужно сложить обычное дробное число с мнимым числом, например, «(3 + 4j)» . Некоторые примеры записи мнимых чисел:

Hittih 08.07.10 в 10:44

0

3.14j 10.j 10j .001j 1e100j 3.14e-10j

Hittih 08.07.10 в 11:59

0

2.5. Операторы
Следующие лексемы являются операторами:

Hittih 08.07.10 в 10:46

0

+ - * ** / // %
&lt;&lt; >> & | ^ ~
&lt; > &lt;= >= == !=

Hittih 08.07.10 в 11:58

0

2.6. Разделители
Следующие лексемы выполняют роль грамматических разделителей:

Hittih 08.07.10 в 10:54

0

( ) [ ] { }
, : . ; @ =
+= -= *= /= //= %=
&= |= ^= >>= &lt;&lt;= **=

Hittih 08.07.10 в 11:58

0

Точка также встречается в записи дробных и мнимых чисел. Последовательность из трех точек имеет особое значение - обозначение пропуска («ellipsis»), вторая половина списка, расширенная операция присваивания, служит в качестве лексического разделителя, и кроме этого выполняет операцию.

Hittih 08.07.10 в 11:34

0

Следующие печатные символы ASCII имеют особое значение как часть других лексем, и, таким образом, важны для лексического анализатора:

Hittih 08.07.10 в 11:46

0

' " # \

Hittih 08.07.10 в 11:57

0

Следующие печатные символы ASCII не используются в Питоне. Их появление за пределами записи текстовых данных или комментариев безусловно является ошибкой:

Hittih 08.07.10 в 11:57

0

$ ?

Hittih 08.07.10 в 11:57

0
Минутку...

← Предыдущая страница