functools en Python
partial, reduce y cached_property: tres herramientas que vale la pena tener a mano.
from functools import cached_property, partial, reduce
def escalar(factor, valor):
return factor * valor
doble = partial(escalar, 2)
print(doble(21), [doble(n) for n in (1, 2, 3)])
print(reduce(lambda a, b: a * b, [1, 2, 3, 4], 1))
class Corpus:
def __init__(self, palabras):
self.words = palabras
@cached_property
def vocabulary(self):
print("se calcula una vez")
return sorted(set(self.words))
corpus = Corpus(["a", "b", "a"])
print(corpus.vocabulary, corpus.vocabulary)
Cómo funciona
partialcongela argumentos y devuelve un callable.cached_propertycalcula una vez por instancia y luego guarda.reducepliega una secuencia cuando no hay builtin para eso.
Palabras clave y builtins usados aquí
classdefforlambdaprintreturnselfsetsorted
El intento, en números
- Líneas
- 24
- Caracteres a escribir
- 481
- Tokens
- 145
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 83 segundos.
Paso 1 de 3 en functools y operator; paso 38 de 53 en Python pythónico.