Simple Decorator


In [5]:
import sys

def simple_def_decorator(F):
    decorator_name = sys._getframe().f_code.co_name 
    function_name = F.__name__
    print "{0} for {1}".format(decorator_name, function_name)
    return F

@simple_def_decorator
def func1():
    pass

func1()


simple_def_decorator for func1

In [9]:
def simple_call_decorator(F):
    decorator_name = sys._getframe().f_code.co_name 
    function_name = F.__name__
    print "def time: {0} for {1}".format(decorator_name, function_name)
    
    def wrapper():
        msg = "call time: {0}"
        print msg.format(F.__name__)
        F()
    
    return wrapper

@simple_call_decorator
def func2():
    print "{0} called".format(sys._getframe().f_code.co_name)

func2()


def time: simple_call_decorator for func2
call time: func2
func2 called

In [16]:
def simple_invocation_callable_decorator():
    decorator_name = sys._getframe().f_code.co_name 
    print "def time: {0}()".format(decorator_name)
        
    def simple_call_decorator(F):
        decorator_name = sys._getframe().f_code.co_name 
        function_name = F.__name__
        print "def time: {0} for {1}".format(decorator_name, function_name)
    
        def wrapper():
            msg = "call time: {0}"
            print msg.format(F.__name__)
            F()
    
        return wrapper
    
    return simple_call_decorator

@simple_invocation_callable_decorator()
def func3():
    print "{0} called".format(sys._getframe().f_code.co_name)
    
func3()


def time: simple_invocation_callable_decorator()
def time: simple_call_decorator for func3
call time: func3
func3 called

In [18]:
def parameterized_invocation_callable_decorator(debug=False):
    decorator_name = sys._getframe().f_code.co_name 
    print "def time: {0}()".format(decorator_name)
    print "debug={0}" % debug
        
    def simple_call_decorator(F):
        decorator_name = sys._getframe().f_code.co_name 
        function_name = F.__name__
        print "def time: {0} for {1}".format(decorator_name, function_name)
    
        def wrapper():
            msg = "call time: {0}"
            print msg.format(F.__name__)
            F()
    
        return wrapper
    
    return simple_call_decorator

@parameterized_invocation_callable_decorator(debug=True)
def func3():
    print "{0} called".format(sys._getframe().f_code.co_name)
    
func3()


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-be6c8b757d57> in <module>()
     17     return simple_call_decorator
     18 
---> 19 @parameterized_invocation_callable_decorator(debug=True)
     20 def func3():
     21     print "{0} called".format(sys._getframe().f_code.co_name)

TypeError: parameterized_invocation_callable_decorator() takes no arguments (1 given)

In [ ]: