Python/Decorator: Difference between revisions

From Fundamental Ramen
Jump to navigation Jump to search
No edit summary
No edit summary
Line 33: Line 33:
         return sum
         return sum
     return wrapper
     return wrapper
</source>
|-
|
|
<source lang="python">def mydeco(func=None, name='default'):
    state = {
        'begin': 0
    }
    def pre_task():
        state['begin'] = time.time()
        print('name=%s' % name)
    def post_task():
        elapsed = time.time() - state['begin']
        print('elapsed=%.2f' % elapsed)
    def func_wrapper(*args):
        pre_task()
        fret = func(*args)
        post_task()
        return fret
    def deco_wrapper(func):
        def func_wrapper(*args):
            pre_task()
            fret = func(*args)
            post_task()
            return fret
        return func_wrapper
    return deco_wrapper if func is None else func_wrapper
</source>
</source>
|}
|}

Revision as of 08:04, 13 June 2019

TODO Code
def pre_hook(func):
    def wrapper(*args):
        a = args[0] + 1
        b = args[1] + 1
        return func(a, b)
    return wrapper
def post_hook(func):
    def wrapper(*args):
        print(func(*args))
    return wrapper
def duo_hook(func):
    def wrapper(*args):
        a = args[0] + 1
        b = args[1] + 1
        sum = func(a, b)
        print(sum)
        return sum
    return wrapper
def mydeco(func=None, name='default'):
    state = {
        'begin': 0
    }

    def pre_task():
        state['begin'] = time.time()
        print('name=%s' % name)

    def post_task():
        elapsed = time.time() - state['begin']
        print('elapsed=%.2f' % elapsed)

    def func_wrapper(*args):
        pre_task()
        fret = func(*args)
        post_task()
        return fret

    def deco_wrapper(func):
        def func_wrapper(*args):
            pre_task()
            fret = func(*args)
            post_task()
            return fret
        return func_wrapper

    return deco_wrapper if func is None else func_wrapper