Funkcja cache

Xoxepin
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:80
0

Witam, mam zagwozdkę.

Zadanie jest następujące:
" Create caching function, which will run some computation and return cached value."

Generalnie od wersji Python 3.5 chyba powstał dedykowany dekorator to obsłużenia czegoś podobnego:
https://docs.python.org/3/library/functools.html (lru)

Chciałbym poznać Wasze pomysły na wykonanie tego zadania, ale bez pomocy tego wzorca, raczej tak napisane "z łapy"

stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:31 minut
0

Cos takiego

Kopiuj
_results = [None for _ in range(MAX_INDEX)]
def result(i):
    if (_results[i] == None):
        _results[i] = calc_result(i)

    return _results[i]

I opakowalbym to w lambde jakos zeby to faktycznie byla funkcja ale trzymala kontekst w domknieciu

Edit: jak argumentem nie jest jakis positive integer to mozna zmienic na slownik np zeby dzialalo


λλλ
edytowany 11x, ostatnio: stivens
NS
@stivens: mam pytanie, dlaczego przed zmienną pisze się '__' ? To jest jakaś konwencja?
stivens
Jak cos to to bylo to (nie do konca prawidlowe) uzycie jako prywatna zmienna, poprawilem na single underscore
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:39 minut
  • Postów:4935
2

Zwyczajowo używa się słownika:

Kopiuj
cache = {}  
def cached_fun(n):
	if n not in cache.keys():
		cache[n] = heavy_computation(n)
	return cache[n]


def heavy_computation(n):
	# ....

edytowany 1x, ostatnio: lion137
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
2

Z takimi rozwiązaniami nie dostalibyście się do dobrej firmy nawet na cieciówkę.

Xoxepin
@Mózg: Jakaś atrakcyjna implementacja?
stivens
*irony on* <chlip chlip> *irony off*
superdurszlak
Z takimi soft skillami wpiszesz się w company culture około zera firm, które otwarcie pozwalają na chamstwo i bycie bucem w codziennych relacjach
stivens
@superdurszlak: a niech sobie bedzie bucem jesli faktycznie ma technicznie cos do powiedzenia. Nie musimy byc ciapami. Cos ala krytyka Linusa. Ale ten przylazl, obrzucil gownem a nic ciekawego nie wniosl do tematu :D :D
superdurszlak
Ale tak jest zawsze. Hurr durr wy debile już ja wam pokażę a potem wyjeżdża np z rozwiązaniem opartym o eval :]
YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:8 dni
  • Postów:2370
0

Może koledze @Mózg chodziło o użycie dekoratora w celu innej organizacji kodu? Ale to i tak sprowadza się do zapamiętania gdzieś obliczonego wyniku ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.