Python/Decorator: Difference between revisions

From Fundamental Ramen
Jump to navigation Jump to search
No edit summary
No edit summary
Line 37: Line 37:
|
|
|
|
<source lang="python">def mydeco(func=None, name='default'):
<source lang="python">
def mydeco(func=None, name='default'):
     state = {
     state = {
         'begin': 0
         'begin': 0
Line 65: Line 66:


     return deco_wrapper if func is None else func_wrapper
     return deco_wrapper if func is None else func_wrapper
@mydeco
def test1():
    time.sleep(3)
@mydeco(name="noname")
def test2():
    time.sleep(1)
</source>
</source>
|}
|}

Revision as of 08:06, 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

@mydeco
def test1():
    time.sleep(3)

@mydeco(name="noname")
def test2():
    time.sleep(1)