Python中的装饰器:使用与误解案例
装饰器是 Python 中一种强大的语言特性,它允许在不修改原函数代码的情况下,为其添加新的功能。让我们通过一些实际的案例来理解装饰器的使用和可能存在的误解。
案例 1:日志记录装饰器
# 原始函数
def original_function():
print("Original function called")
# 日志记录装饰器
@logger
def decorated_function():
print("Decorated function called")
# 创建 logger 实例
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# 打印日志
decorated_function()
案例 2:性能计时装饰器
import time
# 性能计时装饰器
@timer
def slow_function():
time.sleep(5)
# 计时装饰器实现
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs))
end_time = time.time()
print(f"{func.__name__}}: Time taken - {end_time - start_time:.3f} sec")
return result
return wrapper
# 使用装饰器
decorated_slow_function = timer(slow_function)
误解案例:
误认为装饰器可以改变类的行为:
虽然装饰器确实允许在不修改类(实例化对象)的情况下,对方法或属性进行增强,但它并不会改变类的定义。误以为装饰器可替代类中函数的功能:
实际上,装饰器是作为辅助工具存在的,它可以在原函数的基础上增加功能,但不能完全取代原函数。
通过以上的案例和误解分析,相信你对Python中的装饰器有了更深入的理解。
还没有评论,来说两句吧...