Die Verwendung eines Listenverständnisses für seine Nebenwirkungen ist hässlich, nicht pythonisch, ineffizient, und ich würde es nicht tun. Ich würde for
stattdessen eine Schleife verwenden, da eine for
Schleife einen prozeduralen Stil signalisiert, bei dem Nebenwirkungen wichtig sind.
Wenn Sie jedoch unbedingt darauf bestehen, ein Listenverständnis für seine Nebenwirkungen zu verwenden, sollten Sie die Ineffizienz vermeiden, indem Sie stattdessen einen Generatorausdruck verwenden. Wenn Sie absolut auf diesem Stil bestehen, machen Sie einen der beiden folgenden Schritte:
any(fun_with_side_effects(x) and False for x in y if (...conditions...))
oder:
all(fun_with_side_effects(x) or True for x in y if (...conditions...))
Dies sind Generatorausdrücke, und sie generieren keine zufällige Liste, die weggeworfen wird. Ich denke, die all
Form ist vielleicht etwas klarer, obwohl ich denke, dass beide verwirrend sind und nicht verwendet werden sollten.
Ich finde das hässlich und würde es eigentlich nicht im Code machen. Aber wenn Sie darauf bestehen, Ihre Loops auf diese Weise zu implementieren, würde ich das so machen.
Ich neige dazu zu glauben, dass Listenverständnisse und deren Art einen Versuch signalisieren sollten, etwas zu verwenden, das zumindest schwach einem funktionalen Stil ähnelt. Wenn Sie Dinge mit Nebenwirkungen setzen, die diese Annahme brechen, müssen die Leute Ihren Code genauer lesen, und ich denke, das ist eine schlechte Sache.