Python 在语言级别提供了装饰器模式的实现,代码中Python内置的 functools.wraps 会完成包括函数名属性处理替换
#!/usr/bin/env python3#--coding:utf-8--import functoolsdef log1(func): @functools.wraps(func) def wrapper(*args, **kw): print('log1 message') return func(*args, **kw) return wrapper@log1def fn1(): print('fn1 working...')fn1()def log2(text): def decorator(func): @functools.wraps(func) def wrapper(*args, **kw): print('log2 message: {0}'.format(text)) return func(*args, **kw) return wrapper return decorator@log2('python3') # 此处和 log2 定义对应,传入 text 参数def fn2(): print('fn2 working...')fn2()