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

Какая должна быть длина строки по PEP8?

1.3 Junior🔥 141 комментариев
#Python Core

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

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

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

Длина строки в PEP8

PEP8 (Python Enhancement Proposal 8) — это официальный стиль-гайд Python. Вопрос длины строк в нём освещен довольно подробно, хотя требование не абсолютное.

Основная рекомендация

Максимальная длина строки: 79 символов для кода и 72 символа для комментариев и документации.

Это указано в официальном PEP8:

Limit all lines to a maximum of 79 characters. For flowing long blocks of text (docstrings or comments), limiting length to 72 characters is recommended.

# ✅ Правильно — 79 символов для кода
def calculate_sum(numbers):
    return sum(num for num in numbers if num > 0)

# ❌ Неправильно — слишком длинная строка
def calculate_sum(numbers):
    return sum(num for num in numbers if num > 0 and isinstance(num, (int, float)) and num != float(inf))

Историческая причина

Ограничение в 79 символов — это наследие от старых терминалов, которые могли вмещать только 80 символов в ширину (0-79 это 80 позиций). Хотя сегодня мониторы больше, это ограничение:

  • Улучшает читаемость — короткие строки легче сканировать глазом
  • Помогает сравнивать файлы — дифф в двух окнах рядом
  • Облегчает навигацию на мобильных — в IDE с узкими панелями
  • Обеспечивает консистентность — все код читается одинаково

Практика в современных проектах

На практике, строгое соблюдение 79 символов стало менее жёстким. Многие проекты используют более мягкие ограничения:

  • Google Python Style Guide — 80 символов
  • Black (популярный форматер) — 88 символов
  • Ruff (быстрый линтер) — может быть настроен на любое значение
# pyproject.toml или setup.cfg
[tool.black]
line-length = 88

[tool.ruff]
line-length = 88

Исключения из правила

PEP8 сам допускает исключения из 79-символного ограничения:

1. URL и пути:

# URL не нужно разбивать
API_ENDPOINT = "https://api.example.com/v1/users/profile/details/information"

2. Строки в логах и ошибках:

raise ValueError(
    "This is a very long error message that provides detailed information about what went wrong"
)

3. Импорты:

from some.module.with.very.long.path import (
    FirstClass,
    SecondClass,
    ThirdClass,
)

Как переносить длинные строки

1. Неявное разбиение в скобках (рекомендуется):

# ✅ Хорошо — разбить внутри скобок
result = (
    function_one(argument1, argument2)
    + function_two(argument3, argument4)
)

data = [
    item1,
    item2,
    item3,
]

# Вызов функции
response = my_function(
    parameter1="value",
    parameter2="value",
    parameter3="value",
)

2. Явное разбиение с обратным слэшем (менее предпочтительно):

if condition1 and condition2 and \\
   condition3 and condition4:
    pass

3. String concatenation:

long_string = (
    "This is a very long string that needs to be "
    "split across multiple lines for readability."
)
# Результат: "This is a very long string that needs to be split across multiple lines for readability."

Как проверить соответствие PEP8

1. Flake8 (классический линтер):

pip install flake8
flake8 your_script.py
# E501 line too long (85 > 79 characters)

2. Black (автоматический форматер):

pip install black
black your_script.py
# Автоматически переформатирует код

3. Pylint (расширенный анализ):

pip install pylint
pylint your_script.py

4. IDE (встроенная поддержка):

В PyCharm, VS Code с Python расширением:

  • Автоматическое подчёркивание длинных строк
  • Можно настроить любой лимит

Конфигурация в проекте

# .flake8
[flake8]
max-line-length = 88
ignore = E501  # Игнорировать E501 (line too long)
# pyproject.toml
[tool.black]
line-length = 88

[tool.pylint.messages_control]
disable = "line-too-long"

[tool.ruff]
line-length = 88

Выводы

  1. PEP8 рекомендует 79 символов — это стандарт для Python кода
  2. Практика допускает гибкость — многие проекты используют 88-100 символов
  3. Используй форматер — Black, Ruff, или Flake8 автоматизируют проверку
  4. Конфигурируй в проекте — согласуй с командой стандарт
  5. Исключения оправданы — для URL, логов, импортов