使用装饰器增强Python函数功能
发布时间:2024-01-20 01:05:29
装饰器是一种函数,用于增强其他函数的功能。它允许在不修改原函数代码的情况下,对其进行扩展或修改。装饰器通常被用于日志记录、计时、缓存等方面,可以提高代码的可维护性和可复用性。
在Python中,装饰器是通过将装饰器函数作为参数传递给被装饰函数来实现的。被装饰的函数在执行时将会被装饰器包裹,从而实现对原函数的增强。
下面是一个简单的例子,展示了装饰器的基本用法:
def logger(func):
def wrapper(*args, **kwargs):
print(f"Calling function '{func.__name__}'")
return func(*args, **kwargs)
return wrapper
@logger
def add(a, b):
return a + b
result = add(2, 3)
print(result)
在这个例子中,我们定义了一个logger装饰器函数,它接受一个函数作为参数,并返回一个包装函数。包装函数wrapper中打印了正在调用的函数名,并调用了原函数。然后我们使用装饰器@logger来装饰了add函数。当我们调用add函数时,实际上是调用了被装饰后的wrapper函数。
输出结果为:
Calling function 'add' 5
可以看到,在调用add函数时,首先会打印出函数名,然后返回了正确的结果。这说明装饰器成功地增强了原函数的功能。
除了简单的函数打印,装饰器还可以进行更复杂的操作,比如计时、缓存等。下面是一个计时器装饰器的例子:
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"Function '{func.__name__}' took {end_time - start_time} seconds")
return result
return wrapper
@timer
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
result = fibonacci(10)
print(result)
在这个例子中,我们定义了一个timer装饰器函数,它在调用被装饰的函数前后分别记录了当前时间,并计算了时间差。然后我们使用装饰器来装饰了fibonacci函数。当我们调用fibonacci函数时,装饰器会自动记录函数执行的时间。输出结果为:
Function 'fibonacci' took 0.05280876159667969 seconds 55
可以看到,装饰器成功地增强了原函数的功能,进行了计时,并打印出了函数执行的时间。
通过使用装饰器,我们可以在不修改原函数代码的情况下,灵活地增强函数的功能。这样可以使代码更加模块化、可维护和可复用,提高代码的效率和可靠性。
