Когда мы пишем программы, важно не только то, что делает код, но и то, как он выглядит. Хорошо оформленный код легче читать, понимать, отлаживать и поддерживать. Для языка Python существует официальное руководство по стилю кода под названием PEP 8 (от англ. Python Enhancement Proposal – Предложение по улучшению Python). 

PEP 8 представляет собой обширный документ, включающий множество рекомендаций по стилю и оформлению кода на Python. Однако, поскольку мы только начинаем изучение Python, мы рассмотрим только самые основы, такие как:

  • Базовые правила отступов и форматирования.
  • Советы по использованию пробелов и длин строк.
  • Важность аккуратного комментирования и соблюдения регистра.

Отступы

В Python отступы играют ключевую роль в определении блоков кода, которые представляют собой группы логически связанных выполняемых как единое целое. Начало блока кода обозначается увеличением отступа, а конец – возвратом к предыдущему уровню отступа. Согласно PEP 8, для отступов следует использовать 4 пробела.

В примере ниже отступы определяют, какие действия выполняются, если условие истинно:

candy_count = 10
if candy_count > 0:
    print("В вазе еще есть конфеты.")
    print("Можете взять одну.")
    candy_count = candy_count - 1

Здесь инструкции с функциями print() и уменьшением значения переменной candy_count находятся внутри блока кода, который выполняется только в том случае, если значение переменной candy_count больше 0. Отступ в 4 пробела четко показывает, какие инструкции принадлежат этому блоку.

При определении отступов крайне не рекомендуется использование символа табуляции, а также запрещается смешивать пробелы и табуляцию. Даже малейшее нарушение правил отступов приведёт к ошибке IndentationError (с англ. – ошибка отступа), поскольку Python строго следит за структурой кода именно благодаря отступам.

В VS Code при нажатии на клавишу Tab по умолчанию вставляется 4 пробела вместо символа табуляции, что избавляет от необходимости прописывать их вручную.

Длина строки

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

Если выражение становится слишком длинными, Python предлагает несколько предпочтительных методов переноса.

Разбиение длинной строки с помощью скобок

Если выражение заключено в круглые, квадратные, или фигурные скобки, его можно переносить на любое количество строк без использования специального символа переноса. Python автоматически понимает, что выражение не закончено.

Например, если вы работаете с длинной строкой, то просто разбейте её на части и заключите их в скобки. Python объединит их автоматически:

citate = ("Когда потеряна истинная добродетель, является добродушие; "
    " когда же потеряна справедливость, является приличие. Правила приличия "
    "— это только подобие правды и начало всякого беспорядка.")

Для визуального выделения продолжения выражения рекомендуется использовать отступ в 4 пробела (стандартный отступ Python).

Разбиение длинной строки с помощью обратного слэша

Когда выражение нельзя заключить в скобки, используется символ обратного слэша (\), который указывает интерпретатору Python, что следующая строка является продолжением текущей.

Например, это позволит разбить выражение result = 136 + 839 - 892 * 2 - 1 следующим образом:

result = 136 + 839 \
    - 892 * 2 \
    - 1

Если вы случайно добавите пробел после символа \, это вызовет ошибку SyntaxError (с англ. – синтаксическая ошибка). Поэтому PEP 8 настоятельно рекомендует использовать скобки везде, где это возможно, и оставлять символ \ только для ситуаций, где скобки неприменимы.

Порядок инструкций

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

print("Привет, мир!")
print("Как дела?")

При этом существует способ размещения нескольких инструкций на одной строке через точку с запятой:

print("Привет, мир!"); print("Как дела?")

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

Кавычки

В Python для обозначения строк можно использовать как одинарные ('), так и двойные (") кавычки. С точки зрения интерпретатора, разницы между ними нет:

print("Привет, мир!") 
print('Привет, мир!')

Оба варианта выведут на экран одно и то же сообщение:

Привет, мир!

Удобство использования разных видов кавычек проявляется, когда внутри строки необходимо использовать сами кавычки:

print('Сегодня мы сказали: "Привет, мир!"') 
print("Он ответил: 'Все отлично!'")

PEP 8 не устанавливает строгих правил относительно выбора между одинарными и двойными кавычками. Главное – придерживаться одного стиля в рамках всего вашего проекта. Если вы начали использовать для строк двойные кавычки, то старайтесь использовать их и дальше.

Регистрозависимость

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

Например, функция для вывода текста на экран называется print(). Если вы напишете Print() или PRINT(), Python не сможет распознать эту команду, что приведёт к ошибке NameError (с англ. – ошибка имени).

Итоги

  • PEP 8 – официальное руководство по стилю кода на Python.
  • Отступы в Python (рекомендовано 4 пробела) определяют блоки кода.
  • Длина строки по возможности не должна превышать 79 символов.
  • Каждая инструкция должна располагаться на новой строке.
  • Для строк можно использовать как одинарные ', так и двойные " кавычки.
  • Python – регистрозависимый язык, то есть различает строчные и заглавные буквы.

Задания для самопроверки

1. Что такое блок кода?

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

2. Сколько пробелов рекомендуется использовать для отступа?

4 пробела.

3. Как следует размещать инструкции в коде?

Каждую инструкцию следует помещать на новую строку.

4. Какие виды кавычек можно использовать для строк в Python?

Для интерпретатора нет разницы между одинарными и двойными кавычками, поэтому этот вопрос остаётся на усмотрение программиста. Однако рекомендуется придерживаться одного стиля кавычек в проекте.

5. Что произойдёт, если написать PRINT() вместо print() для вывода сообщения на экран?

Это приведёт к ошибке NameError, так как Python – регистрозависимый язык, и слова, которые отличаются хотя бы одной заглавной или строчной буквой, считаются разными.