Python/Справочник по языку Python 3.1: различия между версиями

Содержимое удалено Содержимое добавлено
Исправление
Метки: через визуальный редактор с мобильного устройства из мобильной версии
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 127:
В описаниях лексического анализа и синтаксиса используется модифицированная грамматическая нотация BNF. Применяется следующий стиль определений:
 
<sourcesyntaxhighlight lang="python">name ::= lc_letter (lc_letter | "_")*
lc_letter ::= "a"..."z"</sourcesyntaxhighlight>
 
В первой строке указано, что name - это lc_letter за которым идет последовательность из нуля или более lc_letter и знаков подчеркивания. lc_letter в свою очередь - это любой символ от 'a' до 'z'. (Это правило соблюдается "де-факто" в лексических и грамматических правилах настоящего документа.)
Строка 168:
Если комментарий в первой или второй строке скрипта Python соответствует регулярному выражению coding[=:]\s*([-\w.]+), то этот комментарий обрабатываться как объявление кодировки; первая группа этого выражения задает кодировку исходного текста. Рекомендуемые формы этого выражения:
 
<sourcesyntaxhighlight lang="python"># -*- coding: <encoding-name> -*-</sourcesyntaxhighlight>
 
которая также распознается GNU Emacs, и
 
<sourcesyntaxhighlight lang="python"># vim:fileencoding=<encoding-name></sourcesyntaxhighlight>
 
которая распознается Bram Moolenaar’s VIM.
Строка 184:
Две или более физических строк могут быть объединены в одну условную строку при помощи символа бэкслэш (\) следующим образом: когда строка заканчивается бэкслэшем, не являющимся частью текстовых данных или комментария, она объединяется со следующей, составляя единую условную строку, не включающую бэкслэш и следующий за ним символ окончания строки. Например:
 
<sourcesyntaxhighlight lang="python">if 1900 < year < 2100 and 1 <= month <= 12 \
and 1 <= day <= 31 and 0 <= hour < 24 \
and 0 <= minute < 60 and 0 <= second < 60: # Похоже ли на дату
return 1</sourcesyntaxhighlight>
 
Строка, оканчивающаяся бэкслэшем, не может содержать комментарий. Комментарий или другую лексему кроме текстовых данных, начатые на одной строке, нельзя продолжить с помощью бэкслэша на другой строке. Кроме конца физической строки бэкслэш допустим только внутри текстовых данных.
Строка 195:
Выражения в скобках - круглых, квадратных либо фигурных - могут быть разделены на несколько физических строк без использования бэкслэша. Например:
 
<sourcesyntaxhighlight lang="python">month_names = ['Januari', 'Februari', 'Maart', # Это
'April', 'Mei', 'Juni', # голландские
'Juli', 'Augustus', 'September', # названия
'Oktober', 'November', 'December'] # месяцев</sourcesyntaxhighlight>
 
Неявно продолженные строки могут содержать комментарии. Отступы не играют роли в продолженных строках. При продолжении разрешены пустые строки. Лексемы NEWLINE не должно быть в неявно продолженных строках. Строки в тройных кавычках (см. ниже) также могут быть неявно продолженными, в этом случае они не могут содержать комментарий.
Строка 224:
Здесь приведен пример кода на Питоне с правильно (но странновато) расставленными отступами:
 
<sourcesyntaxhighlight lang="python">def perm(l):
# Расчет списка всех перестановок l
if len(l) <= 1:
Строка 234:
for x in p:
r.append(l[i:i+1] + x)
return r</sourcesyntaxhighlight>
 
Следующий пример показывает различные ошибки в отступах:
 
 
<sourcesyntaxhighlight lang="python">def perm(l): # error: first line indented
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</sourcesyntaxhighlight>
 
(Вообще-то, первые три ошибки найдены парсером, и только последняя - лексическим анализатором: уровень отступа return r не совпадает с уровнем в стеке.)
Строка 269:
Идентификаторы не ограничены по длине и чувствительны к регистру.
 
<sourcesyntaxhighlight lang="python">identifier ::= id_start id_continue*
id_start ::= < все символы в общих категориях Lu, Ll, Lt, Lm, Lo, Nl, подчёркивание, и символы со свойством Other_ID_Start >
id_continue ::= < все символы в id_start, плюс символы в категориях Mn, Mc, Nd, Pc и другие символы со свойством Other_ID_Continue ></sourcesyntaxhighlight>
 
Использованные выше обозначения категорий Юникода :
Строка 294:
Следующие идентификаторы являются зарезервированными или ключевыми словами языка и не могут быть использованы как обычные идентификаторы. Они должны быть написаны именно так, как здесь:
 
<sourcesyntaxhighlight lang="python">False class finally is return
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</sourcesyntaxhighlight>
 
=== 2.3.2. Зарезервированные классы идентификаторов ===
Строка 417:
Допустимы несколько идущих подряд текстовых записей, разделённых пробелами (возможно, с использованием разных типов пар кавычек) - их значение эквивалентно значению одной текстовой записи, являющейся их соединением. Таким образом, «"hello" 'world'» эквивалентно «"helloworld"» . Эта особенность позволяет уменьшать количество необходимых бэкслэшей, удобно разделять длинные тексты на много физических строк, или даже добавлять комментарии к отдельным фрагментам текста, например:
 
<sourcesyntaxhighlight lang="python">re.compile("[A-Za-z_]" # буква или подчёркивание
"[A-Za-z0-9_]*" # буква, цифра или подчёркивание
)</sourcesyntaxhighlight>
 
Обратите внимание, что это свойство определено на синтаксическом уровне, но реализуется во время компиляции. Для соединения фрагментов текста во время исполнения – должен использоваться оператор «+» . Заметьте также, что при соединении текста могут использоваться различные стили оформления для каждого фрагмента (даже смешивание «сырого» текста и в тройных кавычках) .