1. # 你想在装饰器中给被包装函数增加额外的参数,但是不能影响这个函数现有的调用规则。
    2. # 可以使用关键字参数来给被包装函数增加额外参数。
    3. from functools import wraps
    4. def optional_debug(func):
    5. @wraps(func)
    6. def wrapper(*args, debug=False, **kwargs):
    7. if debug:
    8. print('Calling', func.__name__)
    9. return func(*args, **kwargs)
    10. return wrapper
    11. @optional_debug
    12. def spam(a, b, c):
    13. print(a, b, c)
    14. spam(1, 2, 3)
    15. print()
    16. spam(1, 2, 3, debug=True)
    1. 1 2 3
    2. Calling spam
    3. 1 2 3