装饰器

Python SELF ZH
第 14 级 , 课程 1
可用

5.1 了解装饰器

装饰器 — 这些是函数,它们把另一个 函数作为参数并返回一个新的函数,修改或 扩展原函数的行为。装饰器用来提高代码的 可读性和重用性。

装饰器允许你在不改变函数或方法的源代码的情况下 修改其行为。因此,它们广泛用于添加功能、记录日志、访问控制等 任务。

Python 中装饰器的语法包括使用 符号 @ 放在装饰器的名字前面,放置于函数定义前。


@decorator
def my_function():
    pass

这等同于以下代码:


def my_function():
    pass
        
my_function = decorator(my_function)

仔细想想这儿发生了什么:我们声明了函数 my_function,但随后用函数 decorator 替换了它,其中 参数传递了我们的函数。函数 decorator 可以根据自己的选择调用我们的函数。

5.2 创建一个简单的装饰器

让我们来看看一个简单的装饰器,它在函数调用前后输出消息。


def my_decorator(func):
    def wrapper():
        print("调用函数前")
        func()
        print("调用函数后")

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

解释

装饰器 (my_decorator):这个函数接收函数 func 作为 参数并返回一个新的函数 wrapper,它 调用 func 并在其调用前后增加额外的行为。

带装饰器的函数 (say_hello):函数 say_hello 被装饰器 my_decorator 包装,这在其调用时添加了额外的行为。

输出:


# 调用函数前
Hello!
# 调用函数后

5.3 带参数的装饰器

装饰器可以接受参数,这允许灵活地配置其行为。


def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                func(*args, **kwargs)

        return wrapper
        
    return decorator_repeat
        
@repeat(num_times=3)
def say_hello(name):
    print(f"Hello, {name}!")
        
say_hello("Alice")

解释

带参数的装饰器 (repeat):这个函数接受参数 num_times 并返回 装饰器 decorator_repeat

装饰器 (decorator_repeat):这个装饰器接收函数 func 并返回一个新的函数 wrapper,它 调用 func num_times 次。

带装饰器的函数 (say_hello):函数 say_hello 被装饰器 repeat 多次调用。

输出:


Hello, Alice!
Hello, Alice!
Hello, Alice!
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION