L'unica cosa che potrebbe cambiare nel codice di esempio: se avete intenzione di utilizzare un nome lungo come self.memberlist
over ancora una volta, è spesso più leggibile in alias ("assegna") a un nome più breve prima. Così, per esempio, al posto del lungo, duro da leggere:
self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]
si potrebbe codice:
L = self.memberlist
L[someindexA], L[someindexB] = L[someindexB], L[someindexA]
Ricordate che Python opere di riferimento in modo L si riferisce alla esattamente lo stesso oggetto come self.memberlist
, NON una copia (per lo stesso motivo, l'assegnazione è estremamente veloce, non importa per quanto tempo può essere la lista, perché non è comunque copiata - è solo un altro riferimento).
Non che qualsiasi ulteriore complicazione è garantito, anche se naturalmente alcuni tra quelli di fantasia potrebbero facilmente essere concepiti come (a, b "normali" indici >=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]
Credo capire questo tipo di usi "avanzati" è una bella presunzione, esercizio mentale utile e buon divertimento - raccomando che i lettori interessati, una volta che l'idea generale sia chiara, si concentrino sul ruolo di quelli +cmp
e su come fanno funzionare le cose per il tre possibilità (a> b, a < b, a == b) [[non per gli indici negativi, però - perché no, e in che modo l'affettatrice deve cambiare per risolvere questo problema?]]. Ma l'uso di un tale approccio di fantasia nel codice di produzione sarebbe generalmente eccessivo e abbastanza ingiustificato, rendendo le cose più oscure e difficili da mantenere rispetto all'approccio semplice e diretto.
Ricorda, simple is better than complex!
Cosa non ti piace? Che cosa c'è che non va? Cosa ti piacerebbe che potrebbe essere più breve? Potresti fornire uno pseudo-codice per quello che pensi sarebbe meglio? –
È un modo terribile di scrivere uno scambio, dover ripetere ogni espressione, ma è il migliore che Python possa fare. Lo swap di C++ (a, b) è il modo pulito e non ripetitivo di fare swap, ma Python non supporta quel livello di indirezione, quindi non può farlo. Solo qualcosa con cui vivere; ogni lingua ha i suoi limiti, e questo è minore. –