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!
GO TO FULL VERSION