python装饰器的使用
1、有一个场景就是我们执行某个方法的时候执行前加入执行时间那么我们就需要在方法执行的时候加入,一个方法可以,假如有很多都需要批量加入的时候,通常的方法就成了累赘
下面是普通的执行方法前

2、我们可以写个简单的装饰器,避免每次掉用方法前,执行重复代码
import timedef log(func):
def wrapper(*args, **kw):
print 'start execution:%s' % time.strftime('%Y-%m-%d', time.localtime(time.time()))
return func(*args, **kw)
return wrapper
用法:只需要在你的方法前加入@log就好,如下图:

3、那假如我们还想设置参数,来觉得类似于开关一样的功能又改怎么写呢
import time
def log(open=True):
def decorator(func):
def wrapper(*args, **kw):
if open:
print 'start execution:%s' % time.strftime('%Y-%m-%d', time.localtime(time.time()))
return func(*args, **kw)
return wrapper
return decorator
用法如下,只需要在@log(加参数就好),用例如下图:

4、装饰器其实就是你在每次执行方法的时候,自动替你加了一层,并且让你省略了你的写法,不改变原来写法,否则我们就需要log(func())嵌套使用,每个地方都改,太繁琐,才有了装饰器的概念,相当于原始的这种写法

5、装饰器可以多个一起使用
import time
def log(open=True):
def decorator(func):
def wrapper(*args, **kw):
if open:
print 'start execution:%s' % time.strftime('%Y-%m-%d', time.localtime(time.time()))
return func(*args, **kw)
return wrapper
return decorator
def log2(open=True):
def decorator(func):
def wrapper(*args, **kw):
if open:
print 'execution:%s' % time.strftime('%Y-%m-%d', time.localtime(time.time()))
return func(*args, **kw)
return wrapper
return decorator
@log(True)
@log2(True)
def func():
print 'hello world!!!'
func()
具体实现如下图:

6、其实是方法log(log2(fun()))的写法,所有大家可以看到如下执行结果
