Python 向装饰器添加参数

  • Post category:Python

装饰器是Python中一种非常实用的语言特性,它可以给函数、方法等对象动态地增加额外的功能。有时候,我们需要将一些参数传递给装饰器,以便让装饰器更加灵活,这就是向装饰器添加参数的使用方法。

添加参数的方法

要向装饰器添加参数,需要在定义装饰器时增加一个外层的函数,该函数接受装饰器参数,并返回一个装饰器函数,该装饰器函数接受一个函数作为参数,并返回一个新的函数代替原函数。具体示例如下:

def outer(arg):
    def decorator(func):
        def wrapper(*args, **kwargs):
            print(f'装饰器参数为:{arg}')
            res = func(*args, **kwargs)
            return res
        return wrapper
    return decorator

以上代码中,我们定义了一个 outer() 函数,它接受一个参数 arg,并返回一个装饰器 decorator()decorator() 函数接受原函数 func 作为参数,并返回一个新函数 wrapper(),用于替代原函数。

wrapper() 函数中,我们可以使用 arg 参数的值,并对原函数进行调用和返回。

示例一

下面我们来看一个示例,一个简单的函数 say_hello(),我们可以使用刚刚定义的装饰器来为该函数增加输出装饰器参数的功能。

@outer('hello')
def say_hello():
    print('Hello, World!')

say_hello()

以上代码中,我们使用装饰器 outer() 来装饰一个函数 say_hello(),同时指定装饰器参数为 'hello'。当我们调用 say_hello() 函数时,装饰器 outer() 就会执行,并增加输出装饰器参数的功能。输出结果如下:

装饰器参数为:hello
Hello, World!

可以看到,我们已经成功向装饰器添加了参数,并使用装饰器对函数进行了装饰。

示例二

下面给出另一个示例,我们使用 outer() 装饰器给一个包含参数的函数 add() 进行装饰。

@outer('add')
def add(a, b):
    return a + b

res = add(1, 2)
print(res)

以上代码中,我们使用装饰器 outer() 来装饰一个函数 add(),同时指定装饰器参数为 'add'。当我们调用 add() 函数时,装饰器 outer() 就会执行,并增加输出装饰器参数的功能。输出结果如下:

装饰器参数为:add
3

可以看到,我们已经成功向装饰器 outer() 添加了参数,并对包含参数的函数 add() 进行了装饰,实现了在函数执行前后增加额外输出内容的功能。

以上就是向装饰器添加参数的方法和示例,通过这种方式,我们可以非常灵活地使用装饰器,为函数和方法添加各种不同的功能,方便快捷地实现代码的功能扩展。