Python 中的装饰器(decorator)是什么?有什么作用?

在 Python 中,装饰器(decorator)是一种函数,用于在不修改原函数代码的情况下,扩展或修改函数的行为。装饰器通常用于日志记录、权限验证、缓存等场景。装饰器本质上是一个高阶函数,它接受一个函数作为参数并返回一个新的函数。以下是一

Python 中的装饰器(decorator)是什么?有什么作用?

在 Python 中,装饰器(decorator)是一种函数,用于在不修改原函数代码的情况下,扩展或修改函数的行为。装饰器通常用于日志记录、权限验证、缓存等场景。装饰器本质上是一个高阶函数,它接受一个函数作为参数并返回一个新的函数。

以下是一个简单的装饰器示例:

代码语言:javascript代码运行次数:0运行复制
def my_decorator(func):def wrapper():print("在函数调用之前触发")
        func()
        print("在函数调用之后触发")
    return wrapper

@my_decoratordef say_hello():print("Hello!")

say_hello()

在这个示例中:

  1. my_decorator 是一个装饰器函数,它接受一个函数 func 作为参数,并定义了一个内部函数 wrapper 来包裹 func
  2. wrapper 函数在调用 func 之前和之后添加了一些操作,然后调用 func
  3. @my_decorator 语法糖用于将 say_hello 函数传递给 my_decorator,相当于 say_hello = my_decorator(say_hello)
  4. 当调用 say_hello() 时,会执行 wrapper 函数,从而在 say_hello 函数前后添加了额外的行为。

输出结果如下:

代码语言:javascript代码运行次数:0运行复制
在函数调用之前触发
Hello!
在函数调用之后触发

装饰器可以带参数,可以用于类方法,还可以将多个装饰器叠加使用。以下是一个带参数的装饰器示例:

代码语言:javascript代码运行次数:0运行复制
def repeat(num_times):def decorator_repeat(func):def wrapper(*args, **kwargs):for _ inrange(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("Alice")

在这个示例中,我们定义了一个 repeat 装饰器,它接受一个参数 num_times,用于指定函数应被调用的次数。

输出结果如下:

代码语言:javascript代码运行次数:0运行复制
Hello, Alice!
Hello, Alice!
Hello, Alice!

发布者:admin,转转请注明出处:http://www.yc00.com/web/1748037252a4722113.html

相关推荐

  • Python 中的装饰器(decorator)是什么?有什么作用?

    在 Python 中,装饰器(decorator)是一种函数,用于在不修改原函数代码的情况下,扩展或修改函数的行为。装饰器通常用于日志记录、权限验证、缓存等场景。装饰器本质上是一个高阶函数,它接受一个函数作为参数并返回一个新的函数。以下是一

    3小时前
    10

发表回复

评论列表(0条)

  • 暂无评论