Usar una lista de comprensión para sus efectos secundarios es feo, no pitónico, ineficiente y yo no lo haría. En su for
lugar, usaría un bucle, porque un for
bucle indica un estilo de procedimiento en el que los efectos secundarios son importantes.
Pero, si insiste absolutamente en usar una comprensión de lista para sus efectos secundarios, debe evitar la ineficiencia usando una expresión generadora. Si insiste absolutamente en este estilo, haga uno de estos dos:
any(fun_with_side_effects(x) and False for x in y if (...conditions...))
o:
all(fun_with_side_effects(x) or True for x in y if (...conditions...))
Estas son expresiones generadoras y no generan una lista aleatoria que se descarta. Creo que el all
formulario es quizás un poco más claro, aunque creo que ambos son confusos y no deberían usarse.
Creo que esto es feo y en realidad no lo haría en código. Pero si insistes en implementar tus bucles de esta manera, así es como lo haría yo.
Tiendo a sentir que las listas por comprensión y las similares deberían indicar un intento de usar algo que al menos se parezca ligeramente a un estilo funcional. Poner cosas con efectos secundarios que rompan esa suposición hará que las personas tengan que leer su código con más cuidado, y creo que eso es algo malo.
for ... in
se usa en ambos casos, ¡lo que lleva a preguntas como esta!