Discuss / Python / 自己写的

自己写的

Topic source
#coding=utf-8
def log(text=None):
        def decorator(func=None):
                print('begin call')

                def wrapper(*kw,**ks):
                        if not callable(text):
                                print('%s %s():' %(text,func.__name__))
                                print('end call')  
                                return func(*kw,**ks)
                        else:
                                print('call %s():' %(text.__name__))
                                print('end call')  
                                return func(*kw,**ks)
                return wrapper
        if not callable(text):
                return decorator
        else:
                return decorator(text)

print("带'execute'")
@log ('execute')
def f():
        pass

f()

print("\n不带'execute'")

@log
def f():
        pass

f()

运行结果:

带'execute' begin call execute f(): end call

不带'execute' begin call call f(): end call

是怎样想到用callable的?初学者表示好厉害!

支付之灵

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

你这的输出显示的是 begin call execute f(): end call 虽然end call在execute f():之后输出,但是实际上f()此时还没有执行,题目要求的是先执行再输出。

#coding=utf-8
def log(text=None):
        def decorator(func=None):
                print('begin call')

                def wrapper(*kw,**ks):
                        if not callable(text):
                                print('%s %s():' %(text,func.__name__))

                                r = func(*kw,**ks)
                        else:
                                print('call %s():' %(text.__name__))

                                r = func(*kw,**ks)
                        print('end call')
                        return r
                return wrapper
        if not callable(text):
                return decorator
        else:
                return decorator(text)

这样就符合题意了!


  • 1

Reply