python中的装饰器是一种非常棒的操作方式,在不修改之前写好的代码的同时可以增加新的功能,很好的实现AOP。
比如要对一个函数实现一个前后日志的打印,在java中,我们可能需要使用代理模式完成这个功能。而在python中由于函数可以作为参数传递,使得实现的方式简化了不少。
直接上代码:
# -*- coding: utf-8 -*-
#装饰器例子:日志功能
def logs(lever):
def decorator(func):
def wapper(*args,**kwargs):
# args:是一个可变参数
# kwargs:是一个字典
if(lever == 'DEBUG'):
print("[DEBUG]:before")
else:
print("[INFO]:before")
func(*args,**kwargs)
if (lever == 'DEBUG'):
print("[DEBUG]:end")
else:
print("[INFO]:end")
return func
return wapper
return decorator
#指定日志的级别
@logs(lever="DEBUG")
def fun(name,age=10):
print("hello:%s" % name)
print("age:%d" % age)
fun("world",11)