在 Python 中,装饰器是一种特殊的函数,它可以在不修改原有函数代码的情况下,为函数添加额外的功能。装饰器接收一个函数作为参数,并返回一个新的函数,这个新函数通常会在调用原函数之前或之后执行一些额外的操作。



def decorator_function(original_function):
    def wrapper_function():
        print("Before the function is called.")
        original_function()
        print("After the function is called.")
    return wrapper_function

@decorator_function
def say_hello():
    print("Hello!")
if __name__ == '__main__':
    say_hello()

原函数:say_hello

在这个例子中,decorator_function 是一个装饰器,它接收 say_hello 函数作为参数,并返回一个新的函数 wrapper_function。当调用 say_hello 函数时,实际上是在调用 wrapper_function,这个函数会在调用 say_hello 之前和之后打印一些信息。

第二个例子:

不修改原函数代码而希望对其进行功能扩展,可以使用装饰器来实现

def log_function_call(func):
    def wrapper(*args, **kwargs):
        print(f"Calling function {func.__name__}")
        result = func(*args, **kwargs)
        print(f"Function {func.__name__} completed")
        return result
    return wrapper

@log_function_call
def add_numbers(a, b):
    return a + b

result = add_numbers(3, 5)
print(result)

在这个例子中,通过定义装饰器log_function_call,可以在不修改原函数add_numbers代码的情况下,为其添加打印函数调用信息的功能。

使用 Python 的装饰器语法糖@,可以更加简洁地实现相同的效果