Python/Справочник по языку Python 3.1: различия между версиями
Содержимое удалено Содержимое добавлено
Исправление Метки: через визуальный редактор с мобильного устройства из мобильной версии |
DannyS712 (обсуждение | вклад) м <source> -> <syntaxhighlight> (phab:T237267) |
||
Строка 127:
В описаниях лексического анализа и синтаксиса используется модифицированная грамматическая нотация BNF. Применяется следующий стиль определений:
<
lc_letter ::= "a"..."z"</
В первой строке указано, что name - это lc_letter за которым идет последовательность из нуля или более lc_letter и знаков подчеркивания. lc_letter в свою очередь - это любой символ от 'a' до 'z'. (Это правило соблюдается "де-факто" в лексических и грамматических правилах настоящего документа.)
Строка 168:
Если комментарий в первой или второй строке скрипта Python соответствует регулярному выражению coding[=:]\s*([-\w.]+), то этот комментарий обрабатываться как объявление кодировки; первая группа этого выражения задает кодировку исходного текста. Рекомендуемые формы этого выражения:
<
которая также распознается GNU Emacs, и
<
которая распознается Bram Moolenaar’s VIM.
Строка 184:
Две или более физических строк могут быть объединены в одну условную строку при помощи символа бэкслэш (\) следующим образом: когда строка заканчивается бэкслэшем, не являющимся частью текстовых данных или комментария, она объединяется со следующей, составляя единую условную строку, не включающую бэкслэш и следующий за ним символ окончания строки. Например:
<
and 1 <= day <= 31 and 0 <= hour < 24 \
and 0 <= minute < 60 and 0 <= second < 60: # Похоже ли на дату
return 1</
Строка, оканчивающаяся бэкслэшем, не может содержать комментарий. Комментарий или другую лексему кроме текстовых данных, начатые на одной строке, нельзя продолжить с помощью бэкслэша на другой строке. Кроме конца физической строки бэкслэш допустим только внутри текстовых данных.
Строка 195:
Выражения в скобках - круглых, квадратных либо фигурных - могут быть разделены на несколько физических строк без использования бэкслэша. Например:
<
'April', 'Mei', 'Juni', # голландские
'Juli', 'Augustus', 'September', # названия
'Oktober', 'November', 'December'] # месяцев</
Неявно продолженные строки могут содержать комментарии. Отступы не играют роли в продолженных строках. При продолжении разрешены пустые строки. Лексемы NEWLINE не должно быть в неявно продолженных строках. Строки в тройных кавычках (см. ниже) также могут быть неявно продолженными, в этом случае они не могут содержать комментарий.
Строка 224:
Здесь приведен пример кода на Питоне с правильно (но странновато) расставленными отступами:
<
# Расчет списка всех перестановок l
if len(l) <= 1:
Строка 234:
for x in p:
r.append(l[i:i+1] + x)
return r</
Следующий пример показывает различные ошибки в отступах:
<
for i in range(len(l)): # error: not indented
s = l[:i] + l[i+1:]
Строка 245:
for x in p:
r.append(l[i:i+1] + x)
return r # error: inconsistent dedent</
(Вообще-то, первые три ошибки найдены парсером, и только последняя - лексическим анализатором: уровень отступа return r не совпадает с уровнем в стеке.)
Строка 269:
Идентификаторы не ограничены по длине и чувствительны к регистру.
<
id_start ::= < все символы в общих категориях Lu, Ll, Lt, Lm, Lo, Nl, подчёркивание, и символы со свойством Other_ID_Start >
id_continue ::= < все символы в id_start, плюс символы в категориях Mn, Mc, Nd, Pc и другие символы со свойством Other_ID_Continue ></
Использованные выше обозначения категорий Юникода :
Строка 294:
Следующие идентификаторы являются зарезервированными или ключевыми словами языка и не могут быть использованы как обычные идентификаторы. Они должны быть написаны именно так, как здесь:
<
None continue for lambda try
True def from nonlocal while
Строка 300:
as elif if or yield
assert else import pass print
break except in raise</
=== 2.3.2. Зарезервированные классы идентификаторов ===
Строка 417:
Допустимы несколько идущих подряд текстовых записей, разделённых пробелами (возможно, с использованием разных типов пар кавычек) - их значение эквивалентно значению одной текстовой записи, являющейся их соединением. Таким образом, «"hello" 'world'» эквивалентно «"helloworld"» . Эта особенность позволяет уменьшать количество необходимых бэкслэшей, удобно разделять длинные тексты на много физических строк, или даже добавлять комментарии к отдельным фрагментам текста, например:
<
"[A-Za-z0-9_]*" # буква, цифра или подчёркивание
)</
Обратите внимание, что это свойство определено на синтаксическом уровне, но реализуется во время компиляции. Для соединения фрагментов текста во время исполнения – должен использоваться оператор «+» . Заметьте также, что при соединении текста могут использоваться различные стили оформления для каждого фрагмента (даже смешивание «сырого» текста и в тройных кавычках) .
|