Використання розуміння списку для його побічних ефектів є некрасивим, непітонічним, неефективним, і я б цього не робив. Я б використав 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форма, можливо, дещо чіткіша, хоча я думаю, що обидва вони заплутані і їх не слід використовувати.
Я думаю, що це некрасиво, і я насправді цього не зробив би в коді. Але якщо ви наполягаєте на впровадженні циклів таким чином, я б це зробив.
Я схильний вважати, що розуміння списків і їхня хибність повинні сигналізувати про спробу використовувати щось, принаймні слабко схоже на функціональний стиль. Якщо помістити речі з побічними ефектами, які порушують це припущення, змусить людей більш уважно читати ваш код, і я думаю, що це погано.