17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

108<br />

Éléments du langage<br />

DEUXIÈME PARTIE<br />

... return func(arg)<br />

... return _only_ints<br />

...<br />

>>> @only_ints<br />

... def function(arg):<br />

... return arg + 1<br />

...<br />

>>> print(function('t'))<br />

Traceback (most recent call last):<br />

File "", line 1, in ?<br />

File "", line 4, in only_ints<br />

TypeError: 't' doit être un entier<br />

>>> print(function(3))<br />

4<br />

Une fonction de décoration ne doit pas à proprement parler exécuter de code au<br />

moment de son appel, car cet appel est provoqué par l’interpréteur lorsqu’il lit la définition<br />

de la fonction décorée. Il demande alors à la fonction de décoration de lui renvoyer<br />

une fonction qui sera appelée à chaque exécution de la fonction décorée.<br />

Quelques print permettent de mieux comprendre cette mécanique :<br />

La mécanique des decorators<br />

>>> def only_ints(func):<br />

... print('appel du decorator')<br />

... def _only_ints(arg):<br />

... print('appel du code de décoration')<br />

... ifnot isinstance(arg, int):<br />

... raise TypeError("'%s' doit être un entier" % str(arg))<br />

... print('capsule exécute la fonction')<br />

... return func(arg)<br />

... print('only_ints renvoi la capsule')<br />

... return _only_ints<br />

...<br />

>>> @only_ints<br />

... def function(arg):<br />

... return arg + 1<br />

...<br />

appel du decorator<br />

argument_entier renvoie la capsule<br />

>>> function(5)<br />

appel du code de décoration<br />

capsule exécute la fonction<br />

6

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

Saved successfully!

Ooh no, something went wrong!