Menggunakan pemahaman daftar untuk efek sampingnya jelek, non-Pythonic, tidak efisien, dan saya tidak akan melakukannya. Saya akan menggunakan for
loop sebagai gantinya, karena for
loop menandakan gaya prosedural di mana efek samping itu penting.
Tapi, jika Anda benar-benar bersikeras menggunakan pemahaman daftar untuk efek sampingnya, Anda harus menghindari inefisiensi dengan menggunakan ekspresi generator sebagai gantinya. Jika Anda benar-benar bersikeras pada gaya ini, lakukan salah satu dari dua berikut ini:
any(fun_with_side_effects(x) and False for x in y if (...conditions...))
atau:
all(fun_with_side_effects(x) or True for x in y if (...conditions...))
Ini adalah ekspresi generator, dan mereka tidak menghasilkan daftar acak yang dibuang. saya pikirall
bentuknya mungkin sedikit lebih jelas, meskipun menurut saya keduanya membingungkan dan tidak boleh digunakan.
Saya pikir ini jelek dan saya tidak akan benar-benar melakukannya dalam kode. Tetapi jika Anda bersikeras menerapkan loop Anda dengan cara ini, begitulah cara saya melakukannya.
Saya cenderung merasa bahwa pemahaman daftar dan sejenisnya harus menandakan upaya untuk menggunakan sesuatu yang setidaknya mirip dengan gaya fungsional. Menempatkan hal-hal dengan efek samping yang merusak asumsi itu akan menyebabkan orang harus membaca kode Anda lebih hati-hati, dan saya pikir itu hal yang buruk.