Tôi đã phải vật lộn để tìm ra một cách tốt để làm điều này là tốt, vì vậy tôi chỉ nảy ra một ý tưởng (không phải là một viên đạn bạc, vì đây chủ yếu là vấn đề của hương vị).
if bool(condition1 and
condition2 and
...
conditionN):
foo()
bar()
Tôi tìm thấy một vài ưu điểm trong giải pháp này so với các giải pháp khác mà tôi đã thấy, cụ thể là, bạn nhận được chính xác thêm 4 khoảng cách thụt lề (bool), cho phép tất cả các điều kiện xếp hàng theo chiều dọc và phần thân của câu lệnh if có thể được thụt vào một cách rõ ràng (ish). Điều này cũng giữ lợi ích của việc đánh giá ngắn mạch của các toán tử boolean, nhưng tất nhiên sẽ thêm chi phí cho một cuộc gọi hàm mà về cơ bản không có gì. Bạn có thể lập luận (một cách hợp lệ) rằng bất kỳ hàm nào trả về đối số của nó có thể được sử dụng ở đây thay vì bool, nhưng như tôi đã nói, đó chỉ là một ý tưởng và cuối cùng nó là vấn đề của hương vị.
Hài hước lắm, khi tôi đang viết bài này và nghĩ về "vấn đề", tôi đã nảy ra một ý tưởng khác , loại bỏ chi phí của một cuộc gọi chức năng. Tại sao không chỉ ra rằng chúng ta sắp bước vào một điều kiện phức tạp bằng cách sử dụng thêm các cặp dấu ngoặc đơn? Nói, thêm 2, để cung cấp 2 không gian thụt lề đẹp của các điều kiện phụ so với phần thân của câu lệnh if. Thí dụ:
if (((foo and
bar and
frob and
ninja_bear))):
do_stuff()
Tôi thích điều này bởi vì khi bạn nhìn vào nó, một tiếng chuông ngay lập tức vang lên trong đầu bạn nói rằng "này, có một điều phức tạp đang diễn ra ở đây!" . Vâng, tôi biết rằng dấu ngoặc đơn không giúp dễ đọc, nhưng những điều kiện này hiếm khi xuất hiện và khi chúng xuất hiện, bạn sẽ phải dừng lại và đọc chúng cẩn thận (vì chúng phức tạp ).
Dù sao, chỉ hai đề xuất nữa mà tôi chưa thấy ở đây. Hy vọng điều này sẽ giúp được ai đó :)
pep8
tiêu chí của gói. Cácpep8
của gói vấn đề # 126 là về sửa chữa các gói để thực hiện đúng spec PEP8. Các cuộc thảo luận cho vấn đề bao gồm một số gợi ý phong cách cũng được nhìn thấy ở đây.