← Назад к вопросам

До какого количества символов следует ограничивать длину строки в коде

1.0 Junior🔥 151 комментариев
#Python Core#Soft Skills

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Стандарт: 88-120 символов

Длина строки кода — это не просто косметический вопрос, а важная часть читаемости и поддерживаемости проекта.

PEP 8 рекомендация

Официальный стандарт Python (PEP 8) рекомендует максимум 79 символов. Однако это рекомендация из далекого прошлого (от 2001 года), когда мониторы были меньше.

Современный подход

Black formatter (88 символов)

Сейчас в большинстве python проектов используется Black — популярный formatter, который установил стандарт в 88 символов:

# Black настраивает max-line-length на 88
# pyproject.toml
[tool.black]
line-length = 88

Это хороший компромисс между:

  • Читаемостью на современных мониторах
  • Нежеланием иметь очень длинные строки
  • Возможностью запустить две версии кода рядом (split screen)

Мой выбор в проектах

В своих проектах я использую максимум 120 символов, и вот почему:

# 120 символов — более практичный подход для modern development
# pyproject.toml
[tool.ruff.lint]
line-length = 120

[tool.black]
line-length = 120

Практические примеры

Пример 1: Слишком много переносов (88 символов)

# Плохо — много переносов, меньше читаемости
user = (
    database
    .query(User)
    .filter(User.email == email)
    .filter(User.status == "active")
    .first()
)

Пример 2: С 120 символами — более читаемо

# Хорошо — логичная структура, без излишних переносов
user = database.query(User).filter(User.email == email).filter(User.status == "active").first()

Пример 3: Длинный SQL запрос

# С 88 символами нужны переносы
query = (
    "SELECT id, name, email FROM users "
    "WHERE email = :email AND status = :status "
    "ORDER BY created_at DESC LIMIT 1"
)

# С 120 символами более естественно
query = "SELECT id, name, email FROM users WHERE email = :email AND status = :status ORDER BY created_at DESC LIMIT 1"

Пример 4: Type hints

# 88 символов требует переноса
def process_user_data(
    user_id: int,
    data: Dict[str, Any],
    config: Optional[Config] = None,
) -> Tuple[bool, Optional[User]]:
    pass

# 120 символов — более компактно
def process_user_data(user_id: int, data: Dict[str, Any], config: Optional[Config] = None) -> Tuple[bool, Optional[User]]:
    pass

Когда переносить строку

Несмотря на лимит, некоторые строки логично переносить:

Импорты

# Лучше перенести для читаемости
from sqlalchemy import (
    Column,
    Integer,
    String,
    DateTime,
    ForeignKey,
    Boolean,
)

Аргументы функции

# Лучше перенести для ясности
def create_user(
    email: str,
    name: str,
    age: int,
    permissions: List[str],
    metadata: Dict[str, Any],
) -> User:
    pass

Строки и комментарии

# Очень длинный комментарий лучше переносить
# Это помогает понять контекст лучше и делает чтение менее напряжным
user = database.query(User).first()

# Документирующая строка
def complex_algorithm(x: int) -> int:
    """
    Вычисляет сложный алгоритм с множеством условий
    и специальных обработок для граничных случаев.
    """
    pass

Настройка в проекте

pyproject.toml (Ruff + Black)

[tool.black]
line-length = 120

[tool.ruff]
line-length = 120

[tool.ruff.lint]
select = ["E", "W", "F", "I"]
ignore = ["E501"]  # Игнорируем слишком длинные линии если нужно

.flake8

[flake8]
max-line-length = 120
extend-ignore = E203, E266, E501, W503

Почему это важно

  • Читаемость: длинные строки сложнее читать
  • Ревью кода: сложно видеть всю строку на мониторе
  • Git diff: очень длинные строки плохо видны в различиях
  • Мобильные разработчики: могут работать на ноутбуках с узким экраном
  • Консистентность: одинаковый лимит во всем проекте

Мой рекомендуемый стандарт

  • Production код: 120 символов
  • Тесты: 120 символов
  • Документация: 88-100 символов
  • Комментарии: 100 символов

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