Python教程19:装饰器入门
Python教程19:装饰器入门 “简洁的力量在于抽象的恰当。” 装饰器是Python最强大的特性之一,也是初学者觉得最"神秘"的部分。今天我们从基础开始,逐步揭开装饰器的面纱,理解它的本质和应用。 1. 什么是装饰器 问题场景 假设你有多个函数,需要在每个函数执行前后记录日志: 1def add(a, b): 2 print("函数开始执行") # 重复代码 3 result = a + b 4 print("函数执行完毕") # 重复代码 5 return result 6 7def multiply(a, b): 8 print("函数开始执行") # 重复代码 9 result = a * b 10 print("函数执行完毕") # 重复代码 11 return result 问题:每个函数都要写重复的日志代码,违反了DRY(Don’t Repeat Yourself)原则。 装饰器的解决方案 装饰器是一种设计模式,用于在不修改原函数代码的情况下,给函数添加新功能。就像给礼物包装一样,外面包了一层,但礼物本身没变。 1@log_decorator # 这就是装饰器 2def add(a, b): 3 return a + b 4 5# 调用时自动有日志功能 6add(3, 5) 7# 输出: 8# 函数开始执行 9# 8 10# 函数执行完毕 2. 理解装饰器的基础:闭包 在学习装饰器前,需要先理解闭包(Closure)。 什么是闭包 闭包是指:一个函数内部定义的函数,可以访问外部函数的变量。 1def outer(x): 2 # x是外部函数的变量 3 4 def inner(y): 5 # inner可以访问outer的变量x 6 return x + y 7 8 return inner # 返回内部函数 9 10# 创建闭包 11add_5 = outer(5) 12print(add_5(3)) # 8(3 + 5) 13print(add_5(10)) # 15(10 + 5) 关键点: ...