El módulo operator en Python
Funciones con nombre para los operadores, que le ganan a una lambda como clave de orden.
from operator import attrgetter, itemgetter, methodcaller
class Paso:
def __init__(self, titulo, estrellas):
self.title = titulo
self.stars = estrellas
def label(self):
return self.title.upper()
filas = [("rust", 12), ("python", 6), ("sql", 3)]
print(sorted(filas, key=itemgetter(1), reverse=True))
print(list(map(itemgetter(0), filas)))
pasos = [Paso("slices", 2), Paso("traits", 3)]
print([s.title for s in sorted(pasos, key=attrgetter("stars"))])
print(list(map(methodcaller("label"), pasos)))
Cómo funciona
itemgetteryattrgetterson las dos comunes.- Son más rápidas y más claras que la lambda equivalente.
methodcallerllama un método por nombre en cada elemento.
Palabras clave y builtins usados aquí
classdefforlistmapprintreturnselfsorted
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 502
- Tokens
- 167
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 95 segundos.
Paso 3 de 3 en functools y operator; paso 40 de 53 en Python pythónico.