PEP 8

Материал из llmdocs — справочник разработчика
Портал: Python
PEP 8
НазваниеStyle Guide for Python Code
АвторыГвидо ван Россум, Барри Уорсо, Алисса Коглан
Создан5 июля 2001
Тип PEPProcess
СтатусActive
Средства проверкиpycodestyle, flake8, Ruff
ФорматировщикиBlack, Ruff format, autopep8
Текстpeps.python.org/pep-0008

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

История

PEP 8 создан в июле 2001 года на основе эссе Гвидо ван Россума о стиле и руководства Барри Уорсо; позже соавтором стала Алисса Коглан.[1] Документ остаётся «живым»: его уточняют по мере развития языка, например после появления аннотаций типов и f-строк. Соглашения о строках документации вынесены в отдельный PEP 257.[2]

Главная идея

Ключевая мысль сформулирована в разделе с ироничным названием «Глупая последовательность — пугало ограниченных умов»: код читают гораздо чаще, чем пишут, поэтому важна прежде всего читаемость.[1] Согласованность внутри проекта важнее согласованности с PEP 8, а согласованность внутри модуля или функции — важнее всего. Руководство прямо разрешает отступать от правил, если следование им ухудшает читаемость или ломает совместимость со старым кодом.

Основные правила

Отступы и строки

  • 4 пробела на уровень отступа, без табуляции.
  • Максимальная длина строки — 79 символов, для комментариев и строк документации — 72. Команды могут договориться о большем лимите (до 99).
  • Длинные выражения переносятся внутри скобок, а не обратной косой чертой; бинарный оператор лучше ставить в начале новой строки.
  • Две пустые строки вокруг функций и классов верхнего уровня, одна — между методами.

Импорты

  • Каждый импорт на отдельной строке, в начале файла.
  • Порядок групп: стандартная библиотека, сторонние пакеты, модули проекта; между группами — пустая строка.
  • Избегать from module import *.

Пробелы

# правильно
spam(ham[1], {eggs: 2})
x = 1
def complex(real, imag=0.0): ...
result = func(a, key=value)

# неправильно
spam( ham[ 1 ], { eggs: 2 } )
x=1
def complex(real, imag = 0.0): ...

Сравнения

  • С None сравнивают через is / is not, а не ==.
  • Пустые последовательности проверяют как ложные: if not items: вместо if len(items) == 0:.
  • Типы проверяют через isinstance(), а не сравнением type().

Именование

Что Стиль Пример
модули, пакеты короткие, строчные mymodule
функции, переменные, методы snake_case load_config
классы, исключения CapWords HttpClient, ParseError
константы UPPER_CASE MAX_RETRIES
«внутренние» имена ведущее подчёркивание _cache
избежание конфликта с ключевым словом завершающее подчёркивание class_
первый аргумент метода self, у методов класса cls

Имена из двойного подчёркивания по краям (__init__) зарезервированы для специальных методов языка; придумывать собственные не следует.

Инструменты

Следить за стилем вручную непрактично, поэтому используют автоматические средства:

Инструмент Что делает
pycodestyle проверка соответствия PEP 8 (до 2016 года назывался pep8)[3]
flake8 pycodestyle + поиск ошибок (pyflakes) + плагины
Black форматировщик без настроек, строки до 88 символов[4]
Ruff быстрый линтер и форматировщик на Rust, включает правила pycodestyle (коды E, W)[5]
autopep8 автоматическое исправление нарушений
ruff check .            # найти нарушения
ruff check --fix .      # исправить то, что можно
ruff format .           # отформатировать код

Форматировщики снимают споры о стиле в код-ревью: оформление определяет инструмент, а люди обсуждают логику. Обычно их подключают к редактору, к Git-хукам (см. Git-хуки) и к конвейеру CI.

Сравнение с другими языками

Похожие соглашения есть у большинства языков, но степень формализации разная: в Go стиль навязывает утилита gofmt без вариантов, в Rust — rustfmt, в JavaScript принято выбирать конфигурацию ESLint и Prettier. PEP 8 ближе к руководству, чем к закону, а жёсткость добавляют уже инструменты вроде Black.

См. также

Источники

  1. PEP 8 — Style Guide for Python Code
  2. PEP 257 — Docstring Conventions
  3. pycodestyle documentation
  4. Black — The uncompromising code formatter
  5. Ruff — Rules