ITPub博客

首页 > 应用开发 > Python > python中什么是装饰器?如何创建一个参数化的装饰器?

python中什么是装饰器?如何创建一个参数化的装饰器?

原创 Python 作者:mingtian66 时间:2024-11-01 10:46:16 0 删除 编辑

在 Python 中,装饰器是一个用于修饰函数或方法的函数,它可以在不改变原始函数代码的情况下,增强或改变该函数的行为。装饰器通常用于功能复用、逻辑扩展以及代码简化。一个简单的装饰器可以直接通过在函数定义上方使用 @decorator_name 的方式来应用。
创建一个简单的装饰器

一个简单的装饰器通常会定义一个嵌套函数,并返回该嵌套函数。以下是一个简单的装饰器示例:

python

def my_decorator(func):
    def wrapper():
        print("开始执行")
        func()
        print("执行结束")
    return wrapper

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

say_hello()

输出:

开始执行
Hello!
执行结束

在这个例子中,my_decorator 装饰器在 say_hello 函数执行前后添加了额外的输出。
参数化装饰器

有时候,我们希望给装饰器传递参数,比如指定日志级别、条件判断等。这就需要创建参数化的装饰器。实现一个参数化的装饰器时,我们可以使用三层嵌套函数结构:

    第一层接受装饰器的参数。
    第二层是实际的装饰器函数。
    第三层是包装函数,用于封装目标函数的执行。

创建一个参数化装饰器的示例

假设我们希望创建一个装饰器,能够接收一个 greeting 参数来自定义问候语:

python

def greet_decorator(greeting):
    def decorator(func):
        def wrapper(*args, **kwargs):
            print(greeting)
            result = func(*args, **kwargs)
            print("函数执行完毕")
            return result
        return wrapper
    return decorator

@greet_decorator("Hello, welcome!")
def say_name(name):
    print(f"My name is {name}.")

say_name("Alice")

输出:

csharp

Hello, welcome!
My name is Alice.
函数执行完毕

解析

    greet_decorator 是外层函数,它接收 greeting 参数并返回一个真正的装饰器 decorator。
    decorator 是实际的装饰器函数,接受要装饰的函数 func。
    wrapper 是最内层的包装函数,在函数执行前后打印了问候语和结束语,并调用了原始函数 func。

总结

    装饰器是一种用于增强函数功能的模式。
    参数化的装饰器通过三层嵌套实现,使装饰器可以接受参数,用于灵活地控制装饰逻辑。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3044857/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    589
  • 访问量
    603085