欢迎访问宙启技术站
智能推送

使用装饰器增强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

可以看到,装饰器成功地增强了原函数的功能,进行了计时,并打印出了函数执行的时间。

通过使用装饰器,我们可以在不修改原函数代码的情况下,灵活地增强函数的功能。这样可以使代码更加模块化、可维护和可复用,提高代码的效率和可靠性。