您的位置:首页 > 其它

装饰函数

2016-05-27 17:12 183 查看
import functools

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

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

now()

now = log(now)
now()

def log(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator

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

now_dec()
now_dec = log('execute')(now_dec)
now_dec()


其中三层嵌套的理解:
now = log(now) 的意思是 先去调用 log 函数 ,那么会去输出 call now() 跟 bengin call ,接下来调用 func 其实就是去调用 log(now) 中 的 now 函数,这个时候的 now 其实就是 def now() ,但是 这个 now 函数 添加了 装饰函数 @log ,所以又回去调用 log 函数,这个调用的时候是 二层嵌套,直接执行以下就可以,最后执行完成之后会跳回到上一次还没执行完的地方 即 :end call
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: