代码为Python装饰器的使用说明
# -*-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=foo
f()
>>>1111
'''
@log
def 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__)