Sử dụng một danh sách để hiểu các tác dụng phụ của nó là xấu xí, không phải Pythonic, không hiệu quả và tôi sẽ không làm điều đó. for
Thay vào đó, tôi sẽ sử dụng một vòng lặp, vì một for
vòng lặp báo hiệu một kiểu thủ tục trong đó các tác dụng phụ là quan trọng.
Tuy nhiên, nếu bạn hoàn toàn khăng khăng sử dụng khả năng hiểu danh sách cho các tác dụng phụ của nó, bạn nên tránh sự kém hiệu quả bằng cách sử dụng biểu thức trình tạo thay thế. Nếu bạn hoàn toàn kiên định với phong cách này, hãy thực hiện một trong hai cách sau:
any(fun_with_side_effects(x) and False for x in y if (...conditions...))
hoặc là:
all(fun_with_side_effects(x) or True for x in y if (...conditions...))
Đây là các biểu thức của trình tạo và chúng không tạo ra một danh sách ngẫu nhiên bị loại bỏ. Tôi nghĩ all
hình thức có lẽ rõ ràng hơn một chút, mặc dù tôi nghĩ cả hai đều khó hiểu và không nên sử dụng.
Tôi nghĩ rằng điều này là xấu và tôi sẽ không thực sự làm điều đó trong mã. Nhưng nếu bạn kiên quyết thực hiện các vòng lặp của mình theo kiểu này, thì đó là cách tôi sẽ làm.
Tôi có xu hướng cảm thấy rằng khả năng hiểu danh sách và ilk của chúng nên báo hiệu nỗ lực sử dụng thứ gì đó ít nhất là giống một phong cách chức năng. Đưa những thứ có tác dụng phụ phá vỡ giả định đó sẽ khiến mọi người phải đọc mã của bạn cẩn thận hơn, và tôi nghĩ đó là một điều tồi tệ.