首页 > 代码库 > 关于Python的装饰器 decorator
关于Python的装饰器 decorator
语法格式是固定的:先定义一个函数,再使用@语法调用该函数。
例子一:
import functools # 定义装饰器,固定格式 def log(func): @functools.wraps(func) # 将func的一些属性赋予wrapper,如__name__ def wrapper(*args, **kw): print(‘before function %s‘ % func.__name__) func(*args, **kw) print(‘after function %s‘ % func.__name__) return wrapper @log # 使用装饰器,固定格式 def run(words): print(words) # 执行被装饰的函数 run(‘abc‘)
上面是最简单的装饰器,就是在目标函数执行前后输出一些语句。个人认为,这与Java中的aop编程完全是一回事,如果你明白 [aop]+[注解] 编程,那很容易触类旁通。
除了例子一这种简单的装饰器,有时候还需要让装饰器接收一些参数 -- 类似于Java的注解参数,这时候就要多一重嵌套了:
# 如果decorator本身需要接收参数(非被装饰的函数) def log2(text): def decorator(func): def wrapper(*args, **kw): print(‘%s %s():‘ % (text, func.__name__)) return func(*args, **kw) return wrapper return decorator @log2(‘execute‘) def now2(): print(‘2017-02-03‘) now2() print(now.__name__) # 没有使用@functool.wraps(func),所以~~
ps:本文的案例模板来自廖学峰的Python3教程
关于Python的装饰器 decorator
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。