python装饰器的@语法糖怎么用
时间: 2024-09-26 07:15:41 浏览: 13
Python的装饰器@语法糖是一种简洁的方式,用于增强函数的功能,而不需要修改它们的原始定义。它的工作原理是在函数定义之前添加一个或多个装饰器。这里是一个简单的示例:
```python
# 使用@语法糖定义装饰器
def my_decorator(func):
def wrapper():
print("Before the function call")
func()
print("After the function call")
return wrapper
# 使用装饰器
@my_decorator
def say_hello():
print("Hello!")
# 调用装饰过的函数,实际上是调用了wrapper函数
say_hello() # 输出: Before the function call Hello! After the function call
```
在这个例子中,`my_decorator`是一个装饰器函数,它接受一个函数`func`作为参数并创建一个新的函数`wrapper`。当我们使用`@my_decorator`装饰`say_hello`函数时,实际上就是将`say_hello`替换为其包装后的版本。
对于带参数的装饰器[^2],可以这样使用:
```python
class ParameterizedDecorator:
def __init__(self, param):
self.param = param
def __call__(self, func):
def wrapped_func(*args, **kwargs):
print(f"Using parameter: {self.param}")
return func(*args, **kwargs)
functools.update_wrapper(wrapped_func, func) # 保持元信息
return wrapped_func
# 参数化的装饰器应用
decorator_with_param = ParameterizedDecorator('Custom Parameter')
@decorator_with_param
def another_function():
print("Inside decorated function")
another_function() # 输出: Using parameter: Custom Parameter Inside decorated function
```