Das einzige, was ich in Ihrem Beispiel-Code ändern könnte: wenn Sie etwas lange Namen wie self.memberlist
über verwenden werden Noch einmal, es ist oft besser lesbar, wenn Sie es zuerst einem kürzeren Namen zuordnen ("zuweisen"). So zum Beispiel statt der langen, schwer zu lesen:
self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]
Sie könnten Code:
L = self.memberlist
L[someindexA], L[someindexB] = L[someindexB], L[someindexA]
Denken Sie daran, dass Python by-Nachschlagewerken so L genau das gleiche Objekt wie self.memberlist
bezieht, KEINE Kopie (aus dem gleichen Grund ist die Zuweisung extrem schnell, egal wie lange die Liste ist, weil sie sowieso nicht kopiert wird - es ist nur eine weitere Referenz).
Ich denke nicht weiter Komplikation gerechtfertigt ist, obwohl natürlich einige Phantasie diejenigen leicht konzipiert werden könnten, wie zum Beispiel (für a, b „normalen“ Indizes >=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]
Ich denke, Bezifferung aus dieser Art von "fortgeschrittenen" Anwendungen ist eine nette Einbildung, nützliche geistige Übung, und viel Spaß - ich empfehle interessierten Lesern, sobald die allgemeine Idee klar ist, konzentrieren sich auf die Rolle dieser +cmp
und wie sie Dinge für die Arbeit machen drei Möglichkeiten (a> b, a < b, a == b) [[nicht für negative Indizes, obwohl - warum nicht, und wie würde Slicer ändern müssen, um das zu beheben?]]. Aber die Verwendung solch einer ausgeklügelten Herangehensweise im Produktionscode wäre im Allgemeinen übertrieben und ziemlich unberechtigt, wodurch die Dinge trüber und schwieriger zu pflegen wären als der einfache und geradlinige Ansatz.
Denken Sie daran, simple is better than complex!
Was magst du nicht? Was stimmt damit nicht? Was magst du gerne kürzer? Könnten Sie Pseudo-Code für das bereitstellen, was Ihrer Meinung nach besser wäre? –
Es ist eine schreckliche Art, einen Tausch zu schreiben und jeden Ausdruck wiederholen zu müssen, aber es ist das Beste, was Python tun kann. C++'s Swap (a, b) ist die saubere, nicht-repetitive Art, Swaps zu machen, aber Python unterstützt diese indirekte Ebene nicht, also kann es das nicht tun. Nur etwas zum Leben; Jede Sprache hat ihre Grenzen, und das ist eine Nebensache. –