typestar

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

  1. partial congela argumentos y devuelve un callable.
  2. cached_property calcula una vez por instancia y luego guarda.
  3. reduce pliega una secuencia cuando no hay builtin para eso.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en functools y operator; paso 38 de 53 en Python pythónico.

← Anterior Siguiente →