La seule chose que je pourrais changer dans votre code d'exemple: si vous allez utiliser un nom long, comme self.memberlist
sur Encore une fois, il est souvent plus lisible à alias ("attribuer") à un nom plus court en premier. Ainsi, par exemple au lieu de long, difficile à lire:
self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]
vous pourriez code:
L = self.memberlist
L[someindexA], L[someindexB] = L[someindexB], L[someindexA]
Rappelez-vous que Python fonctionne par référence si L désigne exactement le même objet que self.memberlist
, PAS une copie (du même coup, l'assignation est extrêmement rapide quelle que soit la longueur de la liste, car elle n'est pas copiée de toute façon - c'est juste une référence de plus).
Je ne pense pas que toute complication supplémentaire est justifiée, même si bien sûr certains pourraient facilement ceux de fantaisie se concevoir, comme (a, b indices « normaux » >=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]
Je pense comprendre out ces types d'utilisations "avancées" est une belle vanité, exercice mental utile, et bon amusement - je recommande que les lecteurs intéressés, une fois l'idée générale est claire, se concentrer sur le rôle de ceux +cmp
et comment ils font fonctionner les choses pour le trois possibilités (a> b, a < b, a == b) [[pas pour les indices négatifs, cependant - pourquoi pas, et comment slicer besoin de changer pour résoudre ce problème?]]. Mais l'utilisation d'une telle approche sophistiquée dans le code de production serait généralement exagérée et injustifiée, rendant les choses plus difficiles à maintenir que l'approche simple et directe.
Rappelez-vous, simple is better than complex!
Qu'est-ce que vous n'aimez pas? Qu'est ce qui ne va pas avec ça? Qu'aimeriez-vous qui pourrait être plus court? Pourriez-vous fournir un pseudo-code pour ce que vous pensez que serait mieux? –
C'est une manière terrible d'écrire un échange, d'avoir à répéter chaque expression, mais c'est le meilleur que peut faire Python. Le swap de C++ (a, b) est la manière propre et non répétitive de faire des swaps, mais Python ne supporte pas ce niveau d'indirection, donc il ne peut pas le faire. Juste quelque chose à vivre avec; chaque langue a ses limites, et c'est une mineure. –