Python 在语言级别提供了装饰器模式的实现,代码中Python内置的 functools.wraps 会完成包括函数名属性处理替换
#!/usr/bin/env python3 #--coding:utf-8-- import functools def log1(func): @functools.wraps(func) def wrapper(*args, **kw): print('log1 message') return func(*args, **kw) return wrapper @log1 def 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()