Last active 1728455732

decorator.py Raw
1#!/usr/bin/env python3.8
2
3from 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
9def 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
22def 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
36def 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
58def gFibo(NUMBER):
59 Fibonacci(NUMBER)
60
61gFibo(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