Bạn thể làm một cái gì đó như những gì bạn muốn, nhưng bạn không nên. Điều đó nói rằng, đây là cách thực hiện; bạn có thể thấy nó không cải thiện mọi thứ như thế nào.
Vấn đề lớn nhất với cách bạn có nó là Python sẽ đánh giá các thử nghiệm và kết quả của bạn một lần, tại thời điểm bạn khai báo từ điển. Thay vào đó, những gì bạn phải làm là thực hiện tất cả các điều kiện và các hàm báo cáo kết quả; bằng cách này, đánh giá được hoãn lại cho đến khi bạn gọi cho họ. May mắn thay có một cách để làm điều này nội tuyến cho các chức năng đơn giản bằng cách sử dụng từ khóa lambda
. Thứ hai, câu lệnh gán không thể được sử dụng như một giá trị trong Python, vì vậy các hàm hành động của chúng ta (được thực thi nếu hàm điều kiện tương ứng trả về một giá trị trung thực) phải trả về một giá trị sẽ được sử dụng để tăng c
; họ không thể chỉ định cho số c
.
Ngoài ra, các mục trong từ điển không được đặt hàng, vì vậy các bài kiểm tra của bạn sẽ không nhất thiết phải được thực hiện theo thứ tự bạn xác định, có nghĩa là bạn nên sử dụng thứ gì đó khác với từ điển giữ gìn trật tự. hoặc một danh sách. Tôi giả sử bạn chỉ muốn một trường hợp để thực thi.
Vì vậy, ở đây chúng tôi đi:
def findStuff(cds):
cases = [ (lambda: a[2][0] == 1, lambda: i + 1),
(lambda: a[2][1] == 1, lambda: i + 2),
(lambda: a[2][2] == 1, lambda: i + 3),
(lambda: a[1] == 1, lambda: L.append(cds[i:i+3], a[0], c) or 0)
]
L=[]
c=0
for i in range(0, len(cds), 3):
a=differencesTo(cds[i:i+3])
for condition, action in cases:
if condition():
c += action()
break
return L
Đây có phải là dễ đọc hơn so một chuỗi các if/elif
báo cáo? Nooooooooooooo. Cụ thể, trường hợp thứ tư kém dễ hiểu hơn là vì chúng ta phải dựa vào một hàm trả về số tăng cho c
để sửa đổi một biến hoàn toàn khác, và sau đó chúng ta phải tìm ra cách để trả về 0
để c
sẽ không thực sự được sửa đổi. Uuuuuugly.
Đừng làm điều này. Trong thực tế, mã này có lẽ thậm chí sẽ không chạy như-là, như tôi coi nó quá xấu xí để kiểm tra.
gì trên trái đất này là có nghĩa là để làm gì?!?! (Nó có thể thất bại vì 'list.append' trả về' None' và sửa đổi danh sách gốc tại chỗ.) – katrielalex
Hãy cho tôi biết bạn đang đùa khi bạn gọi nó là "đẹp hơn" ... – NPE
Mã có thể đọc được là mã khá. Đừng lo lắng về điều này, sử dụng nếu phát biểu ... –