List comprehension в Python – мощный инструмент для создания списков, позволяющий написать лаконичный и элегантный код. Однако, когда в одном list comprehension выполняется слишком много действий – например, вложенные вычисления, условные операторы, множественные вложенные циклы или побочные эффекты – это приводит к ухудшению читаемости и поддерживаемости кода.


Пример

Данный list comprehension не только фильтрует элементы и создает кортеж с двумя значениями, но и содержит вызов логгера. Такой код трудно читать и понимать, что может привести к проблемам при модификации логики.

Плохо:


numbers = [1, 2, 3, 4, 5]

result = [(num * 2, num ** 2) for num in numbers if (num % 2 == 0) and (logger.info(f"Processing {num}") or True)]

Хорошо:


numbers = [1, 2, 3, 4, 5]
result = []

for num in numbers:
    if num % 2 == 0:
        logger.info(f"Processing {num}")
        doubled_num = num * 2
        squared_num = num ** 2
        result.append((doubled_num, squared_num))