📜  Python中带有参数的装饰器(1)

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

Python中带有参数的装饰器

装饰器是Python语言中非常强大的特性,它可以为现有的函数添加额外的功能。在Python中,装饰器本质上是一个返回函数的函数,可以在函数的定义上使用@符号来调用。

但是有时候,我们需要给装饰器传递一些参数来控制它的行为,下面是一个Python中带有参数的装饰器的示例:

def repeat(num):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for i in range(num):
                print("Running {} iteration".format(i+1))
                func(*args, **kwargs)
        return wrapper
    return decorator_repeat


@repeat(num=3)
def hello(name):
    print("Hello, {}".format(name))

在这个例子中,我们创建了一个名为repeat的装饰器,它接受一个参数num,它指定要重复执行被装饰的函数的次数。decorator_repeat是实际的装饰器函数,它接受一个函数并返回一个函数,即wrapper函数。wrapper函数是被decorator_repeat包装后的函数,它接受任何参数并在执行被包装的函数之前打印重复次数的消息。

然后,我们用@repeat(num=3)装饰hello函数来使hello函数重复执行3次。

我们可以通过以下代码来测试装饰器的效果:

hello("Alice")

运行上面的代码,输出将是以下内容:

Running 1 iteration
Hello, Alice
Running 2 iteration
Hello, Alice
Running 3 iteration
Hello, Alice

在这个例子中,我们有一个装饰器,它接受一个参数来控制它的行为。这个装饰器可以在函数调用之前或之后执行额外的代码,或者修改函数的行为。有了Python中的装饰器,我们可以轻松地实现代码复用、透明地修改函数的行为、以及许多其他的设计模式。