← Назад к вопросам
До какого количества символов следует ограничивать длину строки в коде
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 символов
Это хороший баланс между читаемостью и практичностью в современной разработке.