青岛网站建设 大公司,网络会议系统方案,网站建设与管理实践实践报告,好网站建设公司哪家好Python 装饰器的学习笔记 0. Python 装饰器的说明1. 装饰器的基本结构2. 使用装饰器3. 带参数的装饰器4. 类装饰器 0. Python 装饰器的说明
装饰器是Python中一个非常强大的功能#xff0c;它允许程序员扩展或修改函数的行为而不改变函数本身的代码。装饰器本质上是一个接受函… Python 装饰器的学习笔记 0. Python 装饰器的说明1. 装饰器的基本结构2. 使用装饰器3. 带参数的装饰器4. 类装饰器 0. Python 装饰器的说明
装饰器是Python中一个非常强大的功能它允许程序员扩展或修改函数的行为而不改变函数本身的代码。装饰器本质上是一个接受函数作为参数并返回一个新函数的函数。装饰器通常用于日志记录、性能测试、事务处理、权限校验等场景。
装饰器是一种特殊类型的函数它可以用来修改其他函数的功能。装饰器在定义时使用符号加装饰器名放在函数定义上方。
1. 装饰器的基本结构
def decorator(func):def wrapper(*args, **kwargs):# 在函数执行前可以执行一些操作result func(*args, **kwargs) # 调用原始函数# 在函数执行后可以执行一些操作return resultreturn wrapper2. 使用装饰器
在Python中使用符号加装饰器名放在函数定义上方来应用装饰器。
decorator
def function_to_decorate():pass这等价于
def function_to_decorate():passfunction_to_decorate decorator(function_to_decorate)简单的日志记录装饰器示例
def log_decorator(func):def wrapper(*args, **kwargs):print(fCalling {func.__name__} with arguments {args} and keyword arguments {kwargs})result func(*args, **kwargs)print(f{func.__name__} returned {result})return resultreturn wrapperlog_decorator
def add(x, y):return x yprint(add(3, 4))输出
Calling add with arguments (3, 4) and keyword arguments {}
add returned 7
73. 带参数的装饰器
装饰器本身也可以接受参数。这种情况下你需要定义一个返回装饰器的函数。
示例
def repeat(number3):def decorator_repeat(func):def wrapper(*args, **kwargs):for _ in range(number):result func(*args, **kwargs)return resultreturn wrapperreturn decorator_repeatrepeat(number5)
def greet(name):print(fHello, {name}!)greet(World)输出
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!4. 类装饰器
除了函数之外Python也支持类装饰器。类装饰器通常通过实现__call__方法来工作。
示例
class CountCalls:def __init__(self, func):self.func funcself.calls 0def __call__(self, *args, **kwargs):self.calls 1print(fCall {self.calls} of {self.func.__name__})return self.func(*args, **kwargs)CountCalls
def say_hello():print(Hello!)say_hello()
say_hello()输出
Call 1 of say_hello
Hello!
Call 2 of say_hello
Hello!在这个例子中CountCalls是一个类装饰器它记录了函数被调用的次数。 装饰器是Python高级编程中的一个重要概念它提供了一种优雅的方式来增强函数的行为。正确使用装饰器可以使得代码更加清晰和可维护。
完结