Używanie funkcji rozumienia list do efektów ubocznych jest brzydkie, nie-Pythoniczne, nieefektywne i nie zrobiłbym tego. Chciałbym użyć forpętli zamiast, ponieważ forpętla sygnalizuje styl proceduralną, w której skutki uboczne są ważne.
Jeśli jednak absolutnie nalegasz na używanie funkcji list złożonych do wywoływania skutków ubocznych, powinieneś uniknąć nieefektywności, używając zamiast tego wyrażenia generatora. Jeśli absolutnie nalegasz na ten styl, wykonaj jedną z tych dwóch czynności:
any(fun_with_side_effects(x) and False for x in y if (...conditions...))
lub:
all(fun_with_side_effects(x) or True for x in y if (...conditions...))
Są to wyrażenia generatora, które nie generują losowej listy, która zostaje wyrzucona. Myślę, że allforma jest być może nieco bardziej przejrzysta, chociaż myślę, że oba są mylące i nie powinny być używane.
Myślę, że to jest brzydkie i nie zrobiłbym tego w kodzie. Ale jeśli nalegasz na implementację swoich pętli w ten sposób, tak bym to zrobił.
Wydaje mi się, że listy składane i im podobne powinny sygnalizować próbę użycia czegoś, co najmniej trochę przypominającego styl funkcjonalny. Umieszczanie rzeczy z efektami ubocznymi, które łamią to założenie, spowoduje, że ludzie będą musieli uważniej czytać twój kod i myślę, że to zła rzecz.