Discuss / Python / 交作业

交作业

Topic source

与非----

#1 Created at ... [Delete] [Delete and Lock User]

想了很久,不知道怎么加入 end call

import functools 

def log(text):
    if isinstance(text,str):
        def decorator(func):
            @functools.wraps(func)
            def wrapper(*args, **kw):
                print("%s %s():" %(text, func.__name__))
                return func(*args, **kw)
            return wrapper      
        return decorator   
    else:
        @functools.wraps(text)
        def wrapper(*args, **kw):
            print("call %s():" %text.__name__)
            return text(*args, **kw)
        return wrapper

@log
def now():
    print("2015-06-30")
now()

@log("call")
def now2():
    print("2015-06-31")
now2()

慢慢落

#2 Created at ... [Delete] [Delete and Lock User]

怎么加入 end call wrapper函数可以这么写。

def wrapper(*args, **kw):
    print('begin call %s():' % func.__name__)
    ret = func(*args, **kw)
    print('end call %s():' % func.__name__)
    return ret

Lance6716

#3 Created at ... [Delete] [Delete and Lock User]

顶一下

但是像2楼这么写就没有必要加引入ret了,这样写直接在中间调用,更像是一个伪decorator。


  • 1

Reply