La única cosa que podría cambiar en el código de ejemplo: si se va a utilizar un nombre largo como self.memberlist
sobre una vez más, a menudo es más legible para alias ("asignar") a un nombre más corto primero. Así, por ejemplo, en lugar de la larga y difícil de leer:
self.memberlist[someindexA], self.memberlist[someindexB] = self.memberlist[someindexB], self.memberlist[someindexA]
podría codificar:
L = self.memberlist
L[someindexA], L[someindexB] = L[someindexB], L[someindexA]
Recuerde que Python funciona por referencia por lo que L se refiere a exactamente el mismo objeto que self.memberlist
, NO es una copia (por la misma razón, la tarea es extremadamente rápida, sin importar cuánto tiempo puede durar la lista, porque de todos modos no se copia; es solo una referencia más).
No creo que ninguna complicación adicional se justifica, aunque, por supuesto, algunos de lujo fácilmente podrían ser concebidos, tales como (a, b índices "normales"): >=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]
Creo calcular Este tipo de usos "avanzados" es una buena presunción, ejercicio mental útil y buena diversión. Recomiendo a los lectores interesados, una vez que la idea general es clara, centrarse en el papel de esos +cmp
y cómo hacen que las cosas funcionen para el tres posibilidades (a> b, a < b, a == b) [[no para índices negativos, sin embargo, ¿por qué no, y cómo tendría que cambiar el slicer para arreglar esto?]]. Pero usar un enfoque tan sofisticado en el código de producción generalmente sería excesivo y bastante injustificado, haciendo que las cosas sean más oscuras y difíciles de mantener que el enfoque simple y directo.
Recuerde, simple is better than complex!
¿Qué te gusta? ¿Qué pasa con eso? ¿Qué le gustaría que podría ser más corto? ¿Podrías proporcionar un pseudocódigo para lo que crees que sería mejor? –
Es una forma terrible de escribir un intercambio, teniendo que repetir cada expresión, pero es lo mejor que Python puede hacer. El intercambio de C++ (a, b) es la forma limpia y no repetitiva de hacer swaps, pero Python no admite ese nivel de indirección, por lo que no puede hacer eso. Solo algo con lo que vivir; cada lengua tiene sus limitaciones, y esta es menor. –