17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Fonction avec cache<br />

import md5<br />

cache = {}<br />

def calcul_savant(*args):<br />

key = str(args)<br />

try:<br />

res = cache[key]<br />

except KeyError:<br />

res = md5.md5().hexdigest()<br />

cache[key] = res<br />

return res<br />

Bonnes pratiques et optimisation du code<br />

CHAPITRE 13<br />

Il est possible de rendre ce fonctionnement totalement générique en concevant un<br />

decorator, applicable à toute fonction puisqu’il externalise le mécanisme de caching.<br />

decorator memoize<br />

#!/usr/bin/python<br />

# -*- coding: utf8 -*import<br />

md5<br />

def memoize(func):<br />

cache = {}<br />

def call(*args):<br />

try:<br />

return cache[args]<br />

except KeyError:<br />

res = func(*args)<br />

cache[args] = res<br />

return res<br />

except TypeError:<br />

# paramètre unashable<br />

return func(*args)<br />

call.func_name = func.func_name<br />

return call<br />

@memoize<br />

def calcul_savant(*args):<br />

key = str(args)<br />

return md5.md5(key).hexdigest()<br />

Cette mécanique ne reste efficace que si le nombre de combinaisons de paramètres<br />

en entrée reste relativement faible et si les résultats de la fonction ne dépendent pas<br />

d’autres facteurs externes.<br />

451

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!