Một trong những điều tôi có thể thay đổi trong mã ví dụ của bạn: nếu bạn đang sử dụng một số tên dài như self.memberlist
trên một lần nữa, nó thường dễ đọc hơn đối với bí danh ("gán") cho một tên ngắn hơn trước. Vì vậy, ví dụ thay vì dài, khó đọc:
self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]
bạn có thể mã:
L = self.memberlist
L[someindexA], L[someindexB] = L[someindexB], L[someindexA]
Hãy nhớ rằng Python hoạt động bằng cách tham khảo để L đề cập đến chính xác cùng một đối tượng như self.memberlist
, KHÔNG phải là một bản sao (bởi cùng một mã thông báo, nhiệm vụ là cực kỳ nhanh chóng không có vấn đề bao lâu danh sách có thể được, bởi vì nó không được sao chép anyway - nó chỉ là một tài liệu tham khảo nhiều hơn).
Tôi không nghĩ rằng bất kỳ biến chứng hơn nữa là bảo hành, mặc dù tất nhiên một số những người ưa thích có thể dễ dàng được quan niệm, chẳng hạn như (đối với a, b chỉ số "bình thường" >=0
):
def slicer(a, b):
return slice(a, b+cmp(b,a), b-a), slice(b, a+cmp(a,b), a-b)
back, forth = slicer(someindexA, someindexB)
self.memberlist[back] = self.memberlist[forth]
Tôi nghĩ tìm những cách sử dụng "nâng cao" này là một khái niệm tốt, tập thể dục tinh thần hữu ích và vui vẻ - tôi khuyên người đọc quan tâm, khi ý tưởng chung rõ ràng, tập trung vào vai trò của những người +cmp
đó và cách họ làm mọi thứ ba khả năng (a> b, a < b, a == b) [[không cho chỉ số tiêu cực, mặc dù - tại sao không, và slicer sẽ cần thay đổi để sửa lỗi này như thế nào?]]. Nhưng việc sử dụng một cách tiếp cận ưa thích trong mã sản xuất nói chung là quá mức cần thiết và khá không chính đáng, làm cho mọi thứ trở nên khó khăn hơn và khó duy trì hơn so với cách tiếp cận đơn giản và dễ hiểu.
Hãy nhớ rằng, simple is better than complex!
Những gì bạn không thích? Có gì sai với nó? Những gì bạn muốn mà có thể có thể ngắn hơn? Bạn có thể cung cấp mã giả cho những gì bạn cho là tốt hơn không? –
Đó là một cách khủng khiếp để viết một trao đổi, phải lặp lại mọi biểu thức, nhưng đó là Python tốt nhất có thể làm. Hoán đổi của C++ (a, b) là cách làm sạch, không lặp đi lặp lại để thực hiện hoán đổi, nhưng Python không hỗ trợ mức độ gián đoạn đó, vì vậy nó không thể làm điều đó. Chỉ cần một cái gì đó để sống với; mọi ngôn ngữ đều có những hạn chế của nó, và đây là một hạn chế nhỏ. –