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

Python装饰器函数-函数的装饰和扩展

发布时间:2023-07-03 04:44:47

装饰器是Python语言中一种非常有用的函数,它能够用来修改或者扩展其他函数的功能,同时又不需要修改被装饰函数的源代码。

装饰器函数实际上是一个高阶函数,它接收一个函数作为参数,并且返回一个新的函数。这个新的函数通常会在调用被装饰函数之前或之后执行一些额外的操作。

下面是一个简单的示例,演示了如何使用装饰器函数来记录函数的执行时间:

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"执行时间: {end_time - start_time}秒")
        return result
    return wrapper

@timer
def my_function():
    time.sleep(2)

my_function()

在上面的示例中,timer装饰器函数将被装饰的函数包装在wrapper函数中,wrapper函数在调用被装饰函数之前记录了开始时间,然后调用被装饰函数,记录了结束时间,并且打印出执行时间。

通过在my_function函数上使用@timer装饰器,我们可以很方便地添加计时功能,而不需要修改my_function的源代码。

装饰器函数可以传递参数,也可以用多个装饰器来装饰同一个函数。下面是一个示例:

def debug(func):
    def wrapper(*args, **kwargs):
        print(f"{func.__name__}被调用")
        return func(*args, **kwargs)
    return wrapper

def logger(func):
    def wrapper(*args, **kwargs):
        print(f"{func.__name__}的参数: {args}, {kwargs}")
        return func(*args, **kwargs)
    return wrapper

@debug
@logger
def my_function(a, b):
    return a + b

result = my_function(3, 4)
print(result)

在上面的示例中,debug装饰器函数用来打印被装饰函数的名称,logger装饰器函数用来打印被装饰函数的参数。通过在被装饰函数上使用多个装饰器,我们可以很方便地为函数添加多个功能。

装饰器函数不仅可以装饰普通函数,还可以装饰类的方法。它们是非常灵活和强大的工具,可以帮助我们实现一些复杂的功能,并且不需要修改被装饰函数的源代码。

在实际的开发中,装饰器函数经常被用来实现一些跟业务逻辑相关的功能,比如权限检查、日志记录、性能测试等。它们可以提高代码的可读性和可维护性,同时也减少了代码的重复度。