PEP 8: Главное о стиле кода

Этот пост является краткой выжимкой стилевых правил для языка Python — PEP8.

Итак PEP8 это документ, описывающий общепринятый стиль написания кода на языке Python. Далее представлен короткий вариант PEP8, который состоит из 25 правил.

  1. На каждый уровень отступа используйте по 4 пробела.  Табуляция используется лишь для поддержки старого кода, где они уже используются.
  2. Длину строки рекомендуется ограничить 79 символами. Предпочтительный способ переноса длинных строк — использование подразумевающегося продолжения строки между обычными, квадратными и фигурными скобками. Так же для переноса разрешается использовать обратный слеш («\»).
  3. Функции верхнего уровня и определения классов отделяются двумя пустыми строками. Определения методов внутри класса разделяются одной пустой строкой. Дополнительные пустые строки используются для логического разделения.
  4. Кодировка в Python 2 должна быть ASCII. А в  Python 3  — UTF-8.
  5. Для каждого импорта — отдельная строка. Порядок расположения — стандартные библиотеки, сторонние библиотеки, локальные модули приложения. Импорты всегда помещаются в начале файла, сразу после комментариев к модулю и строк документации, и перед объявлением констант. Используйте пустую строку для отделения групп импортов.
  6. Избегайте лишних пробелов внутри круглых, квадратных или фигурных скобок; перед запятой, точкой с запятой или двоеточием. Сразу перед открывающей скобкой, после которой начинается список аргументов при вызове функции. Не используйте больше одного пробела вокруг любого оператора для того, чтобы выровнять его с другим.
  7. Используйте одиночный пробел с каждой стороны у операторы присваивания(=, +=, -=), операторов сравнения (==, <, >, !=, <>, <=, >=, in, not in, is, is not) и логических операторов (and, or, not). Не используйте пробелы вокруг знака =, если он используется для обозначения именованного аргумента или значения параметров по умолчанию.
  8. Комментарии, которые противоречат коду, хуже, чем их отсутствие. Всегда исправляйте комментарии при обновлении кода. По возможности пишите комментарии на английском языке. Каждая строчка такого блока должна начинаться с символа и одного пробела после него.
  9. Пишите документацию для всех public модулей, функций, классов, методов.
  10. Никогда не используйте символы l (маленькая латинская буква «L»), O (заглавная латинская буква «o») или I (заглавная латинская буква «i») в качестве имен.
  11. Модули должны иметь короткие имена, состоящие из маленьких букв.
  12. Имена классов должны обычно следовать соглашению CapitalizedWords (слова с заглавными буквами).
  13. Имена функций должны состоять из маленьких букв, а слова разделяться символами подчеркивания(lower_case_with_underscores).
  14. Для имен методов и переменных экземпляров классов используйте тот же стиль, что и для имен функций.
  15. Всегда используйте self в качестве первого аргумента метода экземпляра объекта. Всегда используйте cls в качестве первого аргумента метода класса.
  16. Обязательно решите, каким должен быть метод класса или экземпляра класса — public или не-public. Если вы сомневаетесь, выберите не-public.
  17. Код должен быть написан так, чтобы не зависеть от разных реализаций языка.
  18. Сравнения с None должны обязательно выполняться с использованием операторов is или is not, а не с помощью операторов сравнения.
  19. Наследуйте свой класс исключения от Exception. Перехватывайте конкретные ошибки вместо простого выражения except.
  20. Всегда используйте выражение def, а не присваивание лямбда-выражения к имени
  21. Постарайтесь заключать в каждую конструкцию try…except минимум кода, чтобы легче отлавливать ошибки.
  22. Используйте строковые методы вместо модуля string. Используйте ».startswith() и ».endswith() вместо вырезки из строк для проверки префиксов и суффиксов.
  23. Сравнение типов объектов нужно делать с помощью isinstance().
  24. Для последовательностей (строк, списков, кортежей) используйте тот факт, что пустая последовательность есть false.
  25. Не сравнивайте логические типы с True и False с помощью == .
EnglishRussianUkrainian