Использование списка побочных эффектов уродливо, непитонично, неэффективно, и я бы не стал этого делать. for
Вместо этого я бы использовал цикл, потому что for
цикл указывает на процедурный стиль, в котором важны побочные эффекты.
Но если вы абсолютно настаиваете на использовании понимания списка для его побочных эффектов, вам следует избегать неэффективности, используя вместо этого выражение генератора. Если вы абсолютно настаиваете на этом стиле, сделайте одно из этих двух:
any(fun_with_side_effects(x) and False for x in y if (...conditions...))
или:
all(fun_with_side_effects(x) or True for x in y if (...conditions...))
Это выражения-генераторы, и они не генерируют случайный список, который можно выбросить. я думаюall
форма, возможно, немного более ясна, хотя я думаю, что обе они сбивают с толку и не должны использоваться.
Я думаю, что это некрасиво, и я бы не стал делать это в коде. Но если вы настаиваете на реализации ваших циклов таким образом, я бы сделал это именно так.
Я склонен полагать, что понимание списков и тому подобное должно сигнализировать о попытке использовать что-то, хотя бы отдаленно напоминающее функциональный стиль. Добавление вещей с побочными эффектами, которые нарушают это предположение, заставит людей читать ваш код более внимательно, и я думаю, что это плохо.