Menu
Русский

Синтаксис Python: отступы, строки, двоеточия и правила, которые реально важны

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

Самая короткая возможная книга правил

У Python репутация читаемого языка, и она в основном сводится к тому, насколько мало синтаксических правил в нём на самом деле. Все важные умещаются на одной странице:

  • Одна инструкция на строку.
  • Отступы задают структуру — ни скобок, ни ключевых слов end.
  • Регистр важен. name и Name — разные.
  • : открывает блок; следующие строки с отступом под ним — тело блока.
  • # начинает комментарий.

По сути — всё. Остальное — это переменные, функции и привычки стандартной библиотеки, которые ты подхватишь по ходу дела. Пройдёмся по этим пяти правилам с достаточным контекстом, чтобы они перестали ощущаться правилами и начали ощущаться естественной формой языка.

Одна инструкция на строку

Инструкция — это законченная команда: «выведи это», «сложи их», «присвой то». В Python каждая инструкция живёт на своей строке:

main.py
Output
Click Run to see the output here.

Три инструкции, три строки. В конце не нужна точка с запятой, и большинство Python-кода её не использует. (Ты можешь поставить две инструкции на одну строку через точку с запятой, но это считается плохим стилем. Не надо.)

Если строка действительно должна быть длинной, её можно разбить в естественной точке внутри круглых, квадратных или фигурных скобок — Python не против:

main.py
Output
Click Run to see the output here.

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

Отступы — это структура

Вот часть, на которой спотыкаются новички. В Python пробелы в начале строки имеют смысл. Они сообщают Python, какие строки группируются вместе.

Посмотри на простой if:

main.py
Output
Click Run to see the output here.

Две строки после if hour < 12: отбиты четырьмя пробелами. Python читает этот отступ как «эти две строки — тело if». Последний print снова у левого края, поэтому Python считает его находящимся вне if.

Если убрать отступ — if сломается. Если переотбить на один лишний пробел — if сломается. Python здесь строг, потому что отступ и есть структура — нет ни {, ни end, которые бы его подстраховали.

Несколько правил, которые из этого следуют:

  1. Выбери четыре пробела на уровень и держись этого. Это соглашение PEP 8 и то, что редакторы по умолчанию выставляют для .py-файлов.
  2. Не смешивай табы и пробелы. Python 3 отвергнет файл, где есть и то, и другое. Современные редакторы автоматически конвертируют табы в пробелы при сохранении; убедись, что у тебя настроено именно так.
  3. Ошибки отступов будут. Когда случаются — сообщение укажет номер строки. Зайди туда и проверь, что ведущие пробелы совпадают с соседними.

Двоеточие открывает блок

Каждая конструкция, создающая вложенный блок — if, else, for, while, def, class, with, try — заканчивает строку-заголовок двоеточием. Следующие строки с отступом — тело блока:

main.py
Output
Click Run to see the output here.

Две вещи, на которые стоит обратить внимание: двоеточие в конце заголовка и четырёхпробельный отступ на строках тела. Если забыть двоеточие, Python скажет что-то вроде SyntaxError: expected ':'. Эта ошибка недвусмысленна — добавь забытую пунктуацию, и всё.

Чувствительность к регистру

Python считает Name, name и NAME тремя совершенно разными вещами. Это касается:

  • Твоих собственных переменных и функций.
  • Встроенных имён вроде print, len, True, False, None.
  • Имён модулей и атрибутов.

Обычно это кусается, когда ты случайно делаешь заглавную букву. True — это булево истинное значение; true — неопределённая переменная, которая вызовет NameError. Print(...) — это не функция print, это опечатка.

Если ошибка говорит «name 'X' is not defined», а ты клянёшься, что определил X, — первым делом проверь регистр. В девяти случаях из десяти дело именно в нём.

Комментарии через #

Всё, что идёт после # на строке, — комментарий, Python его полностью игнорирует. Комментарии — это заметки будущим читателям (включая тебя будущего):

main.py
Output
Click Run to see the output here.

Синтаксиса многострочных комментариев у Python нет. Если нужно несколько строк — используй несколько строк с #. (Иногда видишь строки в тройных кавычках, используемые как псевдокомментарии, — это отдельная штука под названием docstring, мы разберём её, когда будем говорить о функциях.)

Зарезервированные слова

Несколько слов нельзя использовать как имена переменных, потому что Python использует их сам: if, else, for, while, def, class, return, import, from, as, pass, break, continue, True, False, None, and, or, not, in, is, lambda, try, except, finally, raise, with, yield, global, nonlocal, async, await. Заучивать этот список не нужно. Если попробуешь его применить — Python сразу пожалуется.

Ты уже умеешь читать любой Python-файл

Каждое правило, которое ты только что прочитал, применяется к любому Python-файлу — и к скрипту на две строки, и к проекту на сто тысяч строк. Остальной язык строится на этих пяти идеях. Если файл выглядит запутанно, решение почти всегда — сначала обратить внимание на отступы. Они рассказывают, что делает код, ещё до того, как ты прочитаешь, что именно написано в строках.

Дальше — комментарии чуть подробнее, плюс docstring-и, с помощью которых Python документирует функции и модули.

Часто задаваемые вопросы

Почему Python так щепетилен к отступам?

Python по отступам понимает, какие строки относятся друг к другу. Там, где другие языки оборачивают блоки кода в фигурные скобки { }, Python использует согласованные пробелы в начале строки. Визуально это тише, но значит, что небрежно расставлять пробелы нельзя.

Сколько пробелов использовать для отступа в Python?

Стандарт сообщества (PEP 8) — четыре пробела на уровень. Большинство редакторов вставляют четыре пробела по нажатию Tab в .py-файле. Точное число важно меньше, чем стабильность — смешивание двух и четырёх пробелов в одном блоке — частая ошибка.

Чувствителен ли Python к регистру?

Да. Name, name и NAME — три разные переменные. Встроенные имена вроде print и True нужно писать ровно так, как показано: True работает, true даст ошибку.

Учитесь программировать с Coddy

НАЧАТЬ