Самая короткая возможная книга правил
У Python репутация читаемого языка, и она в основном сводится к тому, насколько мало синтаксических правил в нём на самом деле. Все важные умещаются на одной странице:
- Одна инструкция на строку.
- Отступы задают структуру — ни скобок, ни ключевых слов
end. - Регистр важен.
nameиName— разные. :открывает блок; следующие строки с отступом под ним — тело блока.#начинает комментарий.
По сути — всё. Остальное — это переменные, функции и привычки стандартной библиотеки, которые ты подхватишь по ходу дела. Пройдёмся по этим пяти правилам с достаточным контекстом, чтобы они перестали ощущаться правилами и начали ощущаться естественной формой языка.
Одна инструкция на строку
Инструкция — это законченная команда: «выведи это», «сложи их», «присвой то». В Python каждая инструкция живёт на своей строке:
Три инструкции, три строки. В конце не нужна точка с запятой, и большинство Python-кода её не использует. (Ты можешь поставить две инструкции на одну строку через точку с запятой, но это считается плохим стилем. Не надо.)
Если строка действительно должна быть длинной, её можно разбить в естественной точке внутри круглых, квадратных или фигурных скобок — Python не против:
Или, реже, закончить строку обратным слэшем для продолжения. Скобочный трюк предпочтительнее — именно его используют в большинстве кодовых баз.
Отступы — это структура
Вот часть, на которой спотыкаются новички. В Python пробелы в начале строки имеют смысл. Они сообщают Python, какие строки группируются вместе.
Посмотри на простой if:
Две строки после if hour < 12: отбиты четырьмя пробелами. Python читает этот отступ как «эти две строки — тело if». Последний print снова у левого края, поэтому Python считает его находящимся вне if.
Если убрать отступ — if сломается. Если переотбить на один лишний пробел — if сломается. Python здесь строг, потому что отступ и есть структура — нет ни {, ни end, которые бы его подстраховали.
Несколько правил, которые из этого следуют:
- Выбери четыре пробела на уровень и держись этого. Это соглашение PEP 8 и то, что редакторы по умолчанию выставляют для
.py-файлов. - Не смешивай табы и пробелы. Python 3 отвергнет файл, где есть и то, и другое. Современные редакторы автоматически конвертируют табы в пробелы при сохранении; убедись, что у тебя настроено именно так.
- Ошибки отступов будут. Когда случаются — сообщение укажет номер строки. Зайди туда и проверь, что ведущие пробелы совпадают с соседними.
Двоеточие открывает блок
Каждая конструкция, создающая вложенный блок — if, else, for, while, def, class, with, try — заканчивает строку-заголовок двоеточием. Следующие строки с отступом — тело блока:
Две вещи, на которые стоит обратить внимание: двоеточие в конце заголовка и четырёхпробельный отступ на строках тела. Если забыть двоеточие, Python скажет что-то вроде SyntaxError: expected ':'. Эта ошибка недвусмысленна — добавь забытую пунктуацию, и всё.
Чувствительность к регистру
Python считает Name, name и NAME тремя совершенно разными вещами. Это касается:
- Твоих собственных переменных и функций.
- Встроенных имён вроде
print,len,True,False,None. - Имён модулей и атрибутов.
Обычно это кусается, когда ты случайно делаешь заглавную букву. True — это булево истинное значение; true — неопределённая переменная, которая вызовет NameError. Print(...) — это не функция print, это опечатка.
Если ошибка говорит «name 'X' is not defined», а ты клянёшься, что определил X, — первым делом проверь регистр. В девяти случаях из десяти дело именно в нём.
Комментарии через #
Всё, что идёт после # на строке, — комментарий, Python его полностью игнорирует. Комментарии — это заметки будущим читателям (включая тебя будущего):
Синтаксиса многострочных комментариев у 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 даст ошибку.