Инструмент форматирования Python
Что такое форматирование Python?
Python Formatter упорядочивает Python-код с едиными отступами, переносами строк и читаемой структурой. В Python отступы являются частью синтаксиса, поэтому плохо вставленный или смешанный по стилю код может не только плохо выглядеть, но и менять поведение или вызывать ошибки. Инструмент полезен для скриптов, фрагментов notebooks, сгенерированного кода, учебных примеров, ревью и небольших refactor, делая функции, классы, imports, списки, словари и вложенные выражения понятнее. Форматирование не исправляет логические баги, type errors, отсутствующие зависимости, среду выполнения и неверное использование API. В проектах результат нужно согласовать с Black, Ruff, isort или правилами команды.
Как использовать
Как использовать
- Вставьте или введите код Python в левое поле ввода
- Выберите размер отступа (2 пробела, 4 пробела или Tab)
- Нажмите «Format» для форматирования кода или «Minify» для сжатия
- Результат отображается справа с подсветкой синтаксиса
- Нажмите «Copy», чтобы скопировать в буфер обмена
Описание параметров
Советы по Python
- Python чувствителен к отступам, поэтому проверяйте отформатированные управляющие блоки перед копированием результата в проект.
- Форматирование не выполняет проверку типов, импортов и тестов. Используйте привычные инструменты Python для проверки поведения и зависимостей.
Применение
Технический принцип
Python — один из немногих популярных языков, использующих отступы вместо фигурных скобок для определения блоков кода. Последовательные операторы с одинаковым отступом принадлежат одному блоку; один пробел в большую или меньшую сторону — и семантика меняется. Такой дизайн делает визуальную структуру кода соответствующей его логике, но требует от форматтера точного определения логических уровней. Форматтер сначала сканирует код с помощью модуля tokenize или пользовательского лексического анализатора, рассматривая начальные пробелы каждой строки как информацию об отступах. Операторы внутри скобок (круглых, квадратных или фигурных) могут занимать несколько строк, и в этом случае отступ определяется глубиной вложенности скобок, а не начальными пробелами. Пробелы внутри строковых литералов (тройные кавычки, одинарные кавычки) нельзя изменять, иначе значение строки изменится. PEP 8 — официальное руководство по стилю Python, определяющее отступы в 4 пробела, максимальную длину строки 79 символов, пробелы вокруг операторов, сгруппированные импорты и соглашения об именовании. Black — яркий представитель школы форматтеров без конфигурации: он навязывает двойные кавычки, запятые в конце списков и длину строки в 88 символов с жёсткими и не настраиваемыми правилами. yapf ближе к стилю Google и допускает настройку.
- Семантика отступов: Python использует начальные пробелы для определения блоков кода; одинаковый отступ означает один блок, изменение отступа переключает область видимости
- Правила PEP 8: отступ в 4 пробела, ширина строки 79 символов, пробелы вокруг операторов, CapWords для имён классов, snake_case для имён функций
- Переносы строк внутри скобок: операторы внутри скобок (круглых, квадратных, фигурных) могут переноситься, а отступ определяется глубиной вложенности скобок, а не начальными пробелами
- Границы строк: пробелы внутри тройных кавычек и docstring нельзя изменять, иначе это нарушит содержимое литерала
- Стиль Black: нулевая конфигурация, не настраивается, навязывает двойные кавычки, запятые в конце, 88 символов на строку, идентичный результат во всём проекте
- Аннотации типов: представлены в PEP 484; форматтер сохраняет правильные пробелы вокруг -> типов возврата и параметр : аннотация типа
Примеры
Форматирование определений функций
Вход: def add(a,b):
return a+b
def subtract(a,b):
return a-b
Выход:
def add(a, b):
return a + b
def subtract(a, b):
return a - bФорматирование списковых включений
Вход: result=[x*x for x in range(10) if x%2==0]
result2={k:v for k,v in items if v>0}
Выход:
result = [x * x for x in range(10) if x % 2 == 0]
result2 = {k: v for k, v in items if v > 0}Форматирование определения класса
Вход: class User:
def __init__(self,name,email):
self.name=name
self.email=email
def __repr__(self):
return f"User({self.name})"
Выход:
class User:
def __init__(self, name, email):
self.name = name
self.email = email
def __repr__(self):
return f"User({self.name})"Часто задаваемые вопросы
Какой стиль Python используется?
Большинство сборок по умолчанию следуют PEP 8, часто через Black: ширина строки 88 символов, двойные кавычки, без хвостовых точек с запятой. Black упрям — он отметает большинство настроек, чтобы давать единый стиль по проекту. У autopep8 и yapf больше опций, если нужна гибкость.
Имеют ли отступы значение для форматтера?
Да — отступы в Python определяют структуру блоков. Форматтер уважает существующие границы блоков; если в вводе смешаны табы/пробелы или неверные уровни отступов, разбор упадёт ещё до запуска форматирования.
Исправит ли он порядок импортов?
Black, autopep8 и yapf работают только с пробельными символами. Чтобы отсортировать и сгруппировать импорты, нужен isort (или ruff --fix). Некоторые страницы комбинируют их; смотрите конфигурацию, чтобы понимать, что фактически применяется.
Поддерживаются ли аннотации типов?
Да в современных парсерах. Аннотации типов в сигнатурах функций, переменных и атрибутах классов (PEP 526, 484, 612) форматируются корректно. Самый новый синтаксис (синтаксис обобщений PEP 695 в 3.12+) требует свежего парсера; старые сборки могут спотыкаться.
Загружается ли мой код?
Нет. Форматирование идёт в вашем браузере с помощью JavaScript-реализации AST Python. Вставленный код никуда не передаётся.
Совпадёт ли результат с black у меня в CI?
Близко, но не всегда идентично. Разные версии Black могут форматировать слегка по-разному (Black регулярно обновляет свои правила). Для согласованности с CI запускайте одну и ту же версию Black локально и в CI; считайте эту страницу быстрой визуальной проверкой.
Почему он переносит длинные строки на несколько строк?
PEP 8 и Black стремятся к ≤88 символам в строке. Длинные выражения, вызовы функций со многими аргументами и цепочки вызовов методов разбиваются по строкам ради читаемости. Если у вашей команды 100 или 120, поправьте опцию ширины строки.