Discuss / Python / 答案

答案

Topic source

edwinl

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

感觉好像这样就可以了,求指点。

def log(text1='begin call', text2='end call'):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('%s %s():' % (text1, func.__name__))
            ret = func(*args, **kw)
            print('%s %s():' % (text2, func.__name__))
            return ret
        return wrapper
    return decorator

@log()
def now():
    print('2015-3-25')

now()

HQIA

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

import functools def log(text=''): def decorator (func): @functools.wraps(func) def wrapper(args,**kw): print('begin call %s %s'%(text,func.name)) ret=func(args,**kw) print('end call %s %s'%(text,func.name)) return ret return wrapper return decorator @log() def now1(): print('2015-9-3') @log('execute') def now2(): print('2015-9-3') now1() now2()

jackywgw

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

def log(func): def wrapper(): print('begin call') ret = func() print('end call') return ret return wrapper

@log def now(): print("2015-10-10") return 'wgw'

now=log(now)

a=now() print a

def lognew(p): text='call' if not hasattr(p,"call"): text=p def decorator(func): def wrapper(args,**kw): print("%s %s()" %(text,func.name)) return func(args,**kw) return wrapper if hasattr(p,"_call"): return decorator(p) else: return decorator

@log_new("excute") def now(): print("2015-10-10")

now=log_new("excute")(now)=decorator(now)=wrapper

@log_new def now1(): print("2015-10-11")

now1=log_new(now1)=decorator(now1)=wrapper

now() now1()

siusuu

#4 Created at ... [Delete] [Delete and Lock User]
def log(text1='begin call', text2='end call'):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('%s %s():' % (text1, func.__name__))
            ret = func(*args, **kw)
            print('%s %s():' % (text2, func.__name__))
            return ret
        return wrapper
    return decorator

return ret《——这句完全可以删了,没有起作用

now()的内容完全是由ret = func(*args, **kw) 这一句打印出来的

ret = func(args, *kw)

不是仅仅为 ret 这个变量赋值么? 为什么会调用函数并显示出来了呢?!


  • 1

Reply