Estaba refactorizando un código antiguo mío y me encontré con esto:
alist.sort(cmp_items)
def cmp_items(a, b):
if a.foo > b.foo:
return 1
elif a.foo == b.foo:
return 0
else:
return -1
El código funciona (¡y lo escribí hace unos 3 años!), Pero no puedo encontrar esto documentado en ningún lugar de los documentos de Python y todos lo usan sorted()
para implementar la clasificación personalizada. ¿Alguien puede explicar por qué funciona esto?
sorted()
ysort()
ofrecer clasificación personalizada de la misma manera, modulo la diferencia en la convención de llamadas.key
se prefiere usar un parámetro a pasar unacmp
función. (El último ni siquiera está implementado en Python 3)foo
, de lo contrario explota. Es mejor definir un__lt__()
método personalizado para su clase, entoncessorted()
ylist.sort()
funcionará de inmediato. (Por cierto, los objetos ya no necesitan definirse__cmp__()
, solo__lt__()
. Vea esto