📜  Python中的函数装饰器 |第 1 套(介绍)(1)

📅  最后修改于: 2023-12-03 15:04:35.809000             🧑  作者: Mango

Python中的函数装饰器

函数装饰器是Python中一个强大的工具,主要用于装饰或修改函数或类的行为。在这个介绍中,我们将学习如何使用Python中的函数装饰器。

什么是函数装饰器?

函数装饰器是一个函数,它将另一个函数作为输入,并返回一个新的函数。这个新的函数可以附加一些新的功能,也可以更改原始函数的行为。

在Python中,装饰器以“@”符号表示,并放置在要修饰的函数的上方,如下所示:

@decorator
def my_function():
    # some code

在这个示例中,“decorator”是一个函数装饰器,将“my_function”作为输入,并返回一个新的函数。新的函数将具有原始函数中添加的任何新功能。

为什么使用函数装饰器?

Python的函数装饰器提供了一种有效的方法来修改和扩展代码而不必在每个函数中重复代码。它可以:

  • 使代码更加模块化和可读
  • 在运行时修改函数的行为
  • 在函数中添加新功能,如性能测量和调试输出
如何使用函数装饰器?

下面是一个简单的装饰器示例,它将在函数调用时打印出函数名称:

def my_decorator(func):
    def wrapper():
        print("Calling", func.__name__)
        func()
        print("Done")
    return wrapper

@my_decorator
def say_hello():
    print("Hello, World!")

say_hello()
# Output:
# Calling say_hello
# Hello, World!
# Done

在这个示例中,我们定义了一个函数装饰器“my_decorator”,它接收一个函数作为输入,并返回一个新的函数“wrapper”。新的函数打印出输入函数的名称,然后调用它,并在完成后打印出“Done”。

我们使用“@my_decorator”语法将装饰器应用于函数“say_hello”。在调用“say_hello”时,它调用了“my_decorator”,并返回了一个新的函数。

如何添加参数到函数装饰器?

装饰器函数可以接收任意数量和类型的参数。这使得它们可以更加灵活和通用。

下面是一个带有参数的装饰器示例,它将在函数调用时打印出函数名称和参数:

def my_decorator_with_args(arg1, arg2):
    def wrapper(func):
        def inner_wrapper():
            print("Calling", func.__name__, "with arguments:", arg1, arg2)
            func()
            print("Done")
        return inner_wrapper
    return wrapper

@my_decorator_with_args("Hello", 42)
def say_hello():
    print("Hello, World!")

say_hello()
# Output:
# Calling say_hello with arguments: Hello 42
# Hello, World!
# Done

在这个示例中,我们定义了一个带有两个参数的函数装饰器“my_decorator_with_args”。这个装饰器接收两个参数“arg1”和“arg2”,然后返回一个新的函数“wrapper”。

新的函数“wrapper”接收一个函数作为输入,然后返回一个新的函数“inner_wrapper”。

最后,函数“inner_wrapper”打印出输入函数的名称和参数(在这个例子中是“Hello”和“42”),然后启用输入函数并在完成后打印出“Done”。

我们使用“@my_decorator_with_args('Hello',42)”语法将装饰器应用于函数“say_hello”。在调用“say_hello”时,它调用了“my_decorator”,并返回了一个新的函数。