Comments on: Mémoization d’une fonction Python http://sametmax.com/memoization-dune-fonction-python/ Du code, du cul Mon, 28 Oct 2019 11:54:55 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: Tiger-222 http://sametmax.com/memoization-dune-fonction-python/#comment-15359 Fri, 01 Nov 2013 16:05:25 +0000 http://sametmax.com/?p=1223#comment-15359 @kontre : Ah ok, merci pour les explications :)

]]>
By: kontre http://sametmax.com/memoization-dune-fonction-python/#comment-15334 Thu, 31 Oct 2013 14:56:52 +0000 http://sametmax.com/?p=1223#comment-15334 @Tiger: Pas dans ton cas, puisque tu repasses un nouveau dictionnaire à chaque appel de fonction. Dans ta ligne tu ne déclare pas la fonction, tu l’utilises !
En déclarant le dictionnaire avant, tu utilises bien toujours le même et ça marche.

Tu devrais avoir un truc plutôt comme ça:

def fonction_super_lente(n, _resultats={}):
    # bal bla bla

data = [fonction_super_lente(n) for n in range(10000)]

Au passage, depuis python3.2 il y a un cache dans la lib standard: functools.lru_cache. Dans quelques années ça sera être un standard, qui sait ? En attendant une version compatible pour python < 3.2 est là: http://code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/

]]>
By: Tiger-222 http://sametmax.com/memoization-dune-fonction-python/#comment-15329 Thu, 31 Oct 2013 10:14:25 +0000 http://sametmax.com/?p=1223#comment-15329 Une question maître !
Lorsque tu dis “les paramètres sont initialisés à la déclaration en Python, et une seule fois“, cela est-il vrai aussi dans ce cas là ?

data = [fonction_super_lente(n, _resultats={}) for n in range(10000)]

J’ai mis en place ce système pour le module MSS, et il s’avère que ça a plombé le bousin.
Par contre, en déclarant resultats juste avant la fonction, j’ai pu constater une amélioration flagrante.

Sinon, merci pour l’article ;)

]]> By: Max http://sametmax.com/memoization-dune-fonction-python/#comment-773 Mon, 23 Jul 2012 23:00:34 +0000 http://sametmax.com/?p=1223#comment-773 non justement je viens juste de régler l’opacity :)
Là ils devraient permettre de voir correctement ce qu’il y a dessous.

Ayant une vision supermanesque j’avais complètement oublié que les mortels que vous êtes ne pouvaient voir ce qui était écrit en dessous de ces merveilleux petits tampounets…

Pensez à faire un F5

]]>
By: Réchèr http://sametmax.com/memoization-dune-fonction-python/#comment-772 Mon, 23 Jul 2012 22:38:19 +0000 http://sametmax.com/?p=1223#comment-772 Ouahou, j’ai toujours fait ce genre de truc manuellement, sans penser que y’en a qui y aurait réfléchi dessus avec un vrai cerveau.

Penser à remplacer le “if” par un “if not” dans la version avec attribut. Sinon y’a pas que votre collègue qui va vous demander WTF, y’a l’interpréteur python aussi.

À part ça, les tampons, c’est top feng shui, mais des fois ça cache le texte. Peut-être que vous vous en êtes aperçus et que vous préférez le laisser comme ça, parce que ça fait artiste.

“Ouuaaaiis t’vois, l’important, c’est pas les caractères, mec. C’est ce qu’ils veulent dire au fond d’eux mêmes, t’vois.”

]]>
By: ObnoxiousJul http://sametmax.com/memoization-dune-fonction-python/#comment-738 Sat, 21 Jul 2012 22:21:36 +0000 http://sametmax.com/?p=1223#comment-738 Ça raconte surtout comment je m’ai fail comme le noob que je suis.

Avant d’optimiser, faut bien mesurer le gain que l’on souhaite, et faire gaffe aux propriétés des fonctions que l’on cache.

Sinon, j’insiste beaker.cache c’est la solution costard, cravatte, canne et monocle. Ai je précisé que comme repoze.lru c’est thread safe? La seule différence entre repoze.lru et beaker.cache c’est pour beaker il y avait pas besoin de soumettre un patch pour qu’elle soit complète.

]]>
By: Sam http://sametmax.com/memoization-dune-fonction-python/#comment-737 Sat, 21 Jul 2012 17:47:11 +0000 http://sametmax.com/?p=1223#comment-737 Excellent article. Le benchmarking est toujours un exercice trollesque, mais c’est très bien traité.

Le commentaire de Marius Gedminas à lui tout seul est important.

]]>
By: ObnoxiousJul http://sametmax.com/memoization-dune-fonction-python/#comment-736 Sat, 21 Jul 2012 16:43:54 +0000 http://sametmax.com/?p=1223#comment-736 Si vous voulez voir un comparatif de caches: récit d’un panouillage avec memoize
J’ai testé pour vous :

* memoize avec dict;
* memoize avec un dict à taille fixe mimine 1.0;
* repoze.lru (LRU) cache à taille fixe et éventuellement à temps d’expiration;
* beaker.cache (fait tout mémoire, disk, memcached, taille fixe…)

À le problème d’un mémoize c’est que si on rappelle la fonction souvent on peut pas vider le cache donc repoze.lru propose un fournisseur de cache nommé que l’on peut vider, qui a mon grand dam n’est pas documenté.

Si vous voulez le beurre l’argent du beurre, et marier la crémière je conseille beaker.cache.

]]>
By: Romain http://sametmax.com/memoization-dune-fonction-python/#comment-734 Sat, 21 Jul 2012 15:19:02 +0000 http://sametmax.com/?p=1223#comment-734 Sur python 3 il y a aussi le décorateur lru_cache

]]>
By: Sam http://sametmax.com/memoization-dune-fonction-python/#comment-733 Sat, 21 Jul 2012 15:17:52 +0000 http://sametmax.com/?p=1223#comment-733 C’est très sympas ce truc. Ca stoque les infos dans quel format ? Comment ça gère l’accès concurrent ?

]]>