Информационные технологииStfw.Ru 🔍

Встроенные возможности языка

Здесь описаны синтаксис и семантика различных конструкций языка (выражений, инструкций), встроенные типы данных - в общем то, что обычно рассматривается как "ядро" языка.
🕛 12.07.2009, 11:16
Синтаксис и семантика

Описаны синтаксис и семантика различных конструкций языка Python. Формальное определение грамматики приведено в приложении B.

Структура строк программы
Логические и физические строки

Программа на языке Python состоит из логических строк. Инструкции не могут быть разделены на несколько логических строк, за исключением составных инструкций. Логическая строка составляется из одной или нескольких физических строк, следуя правилам явного или подразумеваемого объединения строк. Отступ в физической строке, являющейся продолжением логической строки, не имеет значения.

Физическая строка заканчивается символом конца строки, принятым для данной платформы: ASCII символ LF для UNIX, последовательность CR LF для DOS и Windows, CR для Macintosh.

Комментарий начинается символом '#', не являющимся частью строкового литерала, и заканчивается в конце физической строки. Комментарии лексическим анализатором игнорируются.

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

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

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

Выражения в обратных кавычках и скобках (круглых, квадратных, фигурных) могут быть разделены на несколько физических строк без использования символа обратной косой черты, например:

month_names = ['Январь', 'февраль', # Названия 'Март', 'Апрель', # месяцев года 'Май', 'Июнь', # по-русски 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь']

Такие физические строки, объединяемые в одну логическую строку по правилам подразумеваемого объединения, могут содержать комментарии. Строковые литералы, записанные с использованием трех кавычек, также могут быть разделены на несколько физических строк, которые, однако, не могут содержать комментарии.

Логические строки, содержащие только символы пропуска (whitespace) и, возможно, комментарий, игнорируются. В интерактивном режиме пустая строка (без символов пропуска и комментариев) используется для обозначения конца составной инструкции.

Отступы

Символы пробела и табуляции в начале логических строк используются для определения уровня отступа строки. Уровень отступа строк используется для объединения инструкций в группы.

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

Приведенный ниже пример имеет правильные, хотя и сбивающие с толку, отступы:
def perm(l): # Создает список всех возможных перестановок в l if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r

А следующий пример показывает возможные ошибки в отступах:

# ошибка: отступ в первой строке def perm(l):
# ошибка: нет отступа for i in range(len(l)): s = l[:i] + l[i+1:]
# ошибка: неожиданный отступ p = perm(l[:i] + l[i+1:]) for x in p: r.append(l[i:i+1] + x)
# ошибка: при уменьшении отступа должна существовать
# строка с точно таким же отступом return r

Общепринято добавлять четыре пробела для каждого следующего уровня отступа. Использование символов табуляции не желательно, так как их интерпретация зависит от используемого редактора и его настроек. Большинство редакторов позволяют настроить автоматическую поддержку отступов. Если Вы работаете с редактором vim, достаточно добавить строчку 'autocmd FileType python set softtabstop=4 shiftwidth=4 expandtab autoindent' в конфигурационный файл редактора '.vimrc' ('_vimrc' под Windows).

Символ подачи страницы (FF) может присутствовать в начале строки и игнорируется при определении отступа. В других местах отступа символ подачи страницы может давать неопределенный эффект (например, обнулить счетчик пробелов).

За исключением начала логической строки и строковых литералов, символы пробела, табуляции и подачи страницы могут быть взаимозаменяемо использованы для разделения лексем.

Python   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉