Yan etkileri için bir liste anlayışı kullanmak çirkin, Pythonic değildir, verimsizdir ve bunu yapmam. Bunun for
yerine bir döngü kullanırdım, çünkü bir for
döngü yan etkilerin önemli olduğu prosedürel bir tarzı işaret eder.
Ancak, yan etkileri için bir liste anlamayı kullanmakta kesinlikle ısrar ediyorsanız, bunun yerine bir üreteç ifadesi kullanarak verimsizlikten kaçınmalısınız. Bu stilde kesinlikle ısrar ediyorsanız, şu ikisinden birini yapın:
any(fun_with_side_effects(x) and False for x in y if (...conditions...))
veya:
all(fun_with_side_effects(x) or True for x in y if (...conditions...))
Bunlar üretici ifadeleridir ve fırlatılıp atılan rastgele bir liste oluşturmazlar. Benceall
form biraz daha net, ancak ikisinin de kafa karıştırıcı olduğunu ve kullanılmaması gerektiğini düşünüyorum.
Bunun çirkin olduğunu düşünüyorum ve bunu kodla yapmam. Ancak döngülerinizi bu şekilde uygulamakta ısrar ediyorsanız, ben böyle yapardım.
Liste anlayışlarının ve benzerlerinin, en azından hafif bir şekilde işlevsel bir stile benzeyen bir şeyi kullanma girişimine işaret etmesi gerektiğini hissediyorum. Bu varsayımı bozan yan etkileri olan şeyler koymak, insanların kodunuzu daha dikkatli okumasına neden olur ve bence bu kötü bir şey.