Python装饰器(不带参/带参)

普通装饰器示例

普通装饰器通常用于在不修改函数签名的情况下增强函数功能。

# 定义一个普通装饰器
def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

# 使用装饰器
@my_decorator
def say_hello():
    print("Hello!")

# 调用被装饰的函数
say_hello()

 

在这个例子中,my_decorator 是一个装饰器,它接收一个函数 func 作为参数,并返回一个新的函数 wrapper。wrapper 函数在原有函数执行前后添加了一些额外的操作。使用 @my_decorator 语法可以将这个装饰器应用于 say_hello 函数。

带参数的装饰器示例

带参数的装饰器稍微复杂一些,因为它需要在装饰器外部接收参数。

# 定义一个带参数的装饰器
def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator_repeat

# 使用带参数的装饰器
@repeat(num_times=3)
def greet(name):
    print(f"Hello {name}!")

# 调用被装饰的函数
greet("World")

 

在这个例子中,repeat 是一个带参数的装饰器工厂,它接收一个参数 num_times。然后返回一个装饰器 decorator_repeat,这个装饰器再返回一个包装函数 wrapperwrapper 函数根据 num_times 参数决定原函数 func 被调用的次数。

带参数的装饰器通常用于需要定制装饰器行为的场景。通过这种方式,你可以在不修改装饰器内部逻辑的情况下,通过参数传递来改变装饰器的行为。

 
posted @ 2024-09-23 18:16  你的小可爱吖  阅读(37)  评论(0编辑  收藏  举报