From a6438f4e6ffa73c74c4dabe36562e4bbb6df2fcb Mon Sep 17 00:00:00 2001 From: Fred Z Date: Tue, 6 Feb 2018 09:58:29 +0100 Subject: [PATCH] Exercices sur les decorateurs|Ex_3.8|ADD decorator.py --- decorator.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 decorator.py diff --git a/decorator.py b/decorator.py new file mode 100644 index 0000000..edc47a2 --- /dev/null +++ b/decorator.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +Cours OC/python 3 +[Les decorateurs](https://openclassrooms.com/courses/apprenez-a-programmer-en-python/les-decorateurs) + +Author: freezed 2018-02-05 +Version: 0.1 +Licence: `GNU GPL v3` GNU GPL v3: http://www.gnu.org/licenses/ + +:Example: +>>> hello_world() +La fonction appelee: est obsolete. + +>>> wait_for() + +""" +import time + +def my_decorator(function): + """ test de decorateur """ + + def modified_func(): + """ Function modifiee utilisee par le decorateur """ + print("Appel de la fonction: {}".format(function)) + return function() + + return modified_func + +def obsolete_exception(function): + """ Decorateur empechant l'execution d'une fonction obsolete """ + + def modd_func(): + print("La fonction appelee: {} est obsolete.".format(function)) + + return modd_func + +def time_checker(seconds): + """ Recoit le parametre passe en argument du decorateur """ + + def time_decorator(function): + """ Le decorateur """ + + def modified_func(*args, **kwargs): + """ Function renvoyee par le decorateur """ + + tstp_begin = time.time() + exec_initial_func = function(*args, **kwargs) + tstp_end = time.time() + duration = tstp_end - tstp_begin + if duration > seconds: + print("La fonction {} à mis {}s pour s'executer".format( \ + function, round(duration, 1))) + + return exec_initial_func + return modified_func + return time_decorator + +@obsolete_exception +def hello_world(): + print("Hello World") + +@time_checker(3) +def wait_for(name="à vous"): + input("Bonjour {}, appuyez sur la touche enter…".format(name)) + + +if __name__ == "__main__": + """ Starting doctests """ + + import doctest + doctest.testmod()