# -*-coding : utf-8 -*-def log(func): def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper'''foo(): print('1111')f=foof()>>>1111'''@logdef now(): print('2015-3-25')#now = log(now) #这里log(now)的返回值就是wrapper,now变量被赋值一个函数名,可以用@log代替此句now()#执行的是上一句的wrapper函数,在这个函数中,先执行print(),再执行func(),func()就是本身的now(),#如果不执行now = log(now),函数now()直接就是now()函数。#有些依赖函数签名的代码执行就会出错,需要@functools.wraps(func),将wrapper这个函数里面wrapper.__name__ = func.__name__。#只需记住在定义wrapper()的前面加上@functools.wraps(func)即可。print(now.__name__)
python装饰器
最新推荐文章于 2020-04-08 17:33:46 发布