decorator.py
· 2.3 KiB · Python
Raw
#!/usr/bin/env python3.8
from functools import wraps
# wraps est un décorateur qui permet de décorer la fonction wrapper
# du décorateur que l'on construit pour le rendre transparent.
# comme ça on peut utiliser en cascade une suite de décorateur, de
# l’extérieur, on ne vois que les informations de la fonction décoré.
def logging(func):
"""
Un décorateur qui log l'activité d'un script.
(Ok, en vrai ça fait un print, mais ça pourrait logger !)
"""
@wraps(func)
def wrapper(*args, **kwargs):
print("Initialisation de '{} {} {}'".format(func.__name__, args, kwargs))
res = func(*args, **kwargs)
print("Fin de la fonction '{}'".format(func.__name__))
return res
return wrapper
def benchmark(func):
"""
Un décorateur qui affiche le temps qu'une fonction met à s'éxécuter
"""
import time
@wraps(func)
def wrapper(*args, **kwargs):
t = time.perf_counter()
res = func(*args, **kwargs)
#log.debug("Durée de l’exécution de la fonction '{}' --> {:0.2e}s".format(func.__name__, time.perf_counter()-t))
print("Durée de l’exécution de la fonction '{}' --> {:0.2e}s".format(func.__name__, time.perf_counter()-t))
return res
return wrapper
def Fibonacci(n):
# Check if input is 0 then it will
# print incorrect input
if n < 0:
print("Incorrect input")
# Check if n is 0
# then it will return 0
elif n == 0:
return 0
# Check if n is 1,2
# it will return 1
elif n == 1 or n == 2:
return 1
else:
return Fibonacci(n-1) + Fibonacci(n-2)
@benchmark
@logging
def gFibo(NUMBER):
Fibonacci(NUMBER)
gFibo(12)
#Initialisation de 'gFibo (12,) {}'
#Fin de la fonction 'gFibo'
#Durée de l’exécution de la fonction 'gFibo' --> 7.99e-04s
| 1 | #!/usr/bin/env python3.8 |
| 2 | |
| 3 | from functools import wraps |
| 4 | # wraps est un décorateur qui permet de décorer la fonction wrapper |
| 5 | # du décorateur que l'on construit pour le rendre transparent. |
| 6 | # comme ça on peut utiliser en cascade une suite de décorateur, de |
| 7 | # l’extérieur, on ne vois que les informations de la fonction décoré. |
| 8 | |
| 9 | def logging(func): |
| 10 | """ |
| 11 | Un décorateur qui log l'activité d'un script. |
| 12 | (Ok, en vrai ça fait un print, mais ça pourrait logger !) |
| 13 | """ |
| 14 | @wraps(func) |
| 15 | def wrapper(*args, **kwargs): |
| 16 | print("Initialisation de '{} {} {}'".format(func.__name__, args, kwargs)) |
| 17 | res = func(*args, **kwargs) |
| 18 | print("Fin de la fonction '{}'".format(func.__name__)) |
| 19 | return res |
| 20 | return wrapper |
| 21 | |
| 22 | def benchmark(func): |
| 23 | """ |
| 24 | Un décorateur qui affiche le temps qu'une fonction met à s'éxécuter |
| 25 | """ |
| 26 | import time |
| 27 | @wraps(func) |
| 28 | def wrapper(*args, **kwargs): |
| 29 | t = time.perf_counter() |
| 30 | res = func(*args, **kwargs) |
| 31 | #log.debug("Durée de l’exécution de la fonction '{}' --> {:0.2e}s".format(func.__name__, time.perf_counter()-t)) |
| 32 | print("Durée de l’exécution de la fonction '{}' --> {:0.2e}s".format(func.__name__, time.perf_counter()-t)) |
| 33 | return res |
| 34 | return wrapper |
| 35 | |
| 36 | def Fibonacci(n): |
| 37 | |
| 38 | # Check if input is 0 then it will |
| 39 | # print incorrect input |
| 40 | if n < 0: |
| 41 | print("Incorrect input") |
| 42 | |
| 43 | # Check if n is 0 |
| 44 | # then it will return 0 |
| 45 | elif n == 0: |
| 46 | return 0 |
| 47 | |
| 48 | # Check if n is 1,2 |
| 49 | # it will return 1 |
| 50 | elif n == 1 or n == 2: |
| 51 | return 1 |
| 52 | |
| 53 | else: |
| 54 | return Fibonacci(n-1) + Fibonacci(n-2) |
| 55 | |
| 56 | @benchmark |
| 57 | @logging |
| 58 | def gFibo(NUMBER): |
| 59 | Fibonacci(NUMBER) |
| 60 | |
| 61 | gFibo(12) |
| 62 | |
| 63 | #Initialisation de 'gFibo (12,) {}' |
| 64 | #Fin de la fonction 'gFibo' |
| 65 | #Durée de l’exécution de la fonction 'gFibo' --> 7.99e-04s |