python装饰器示例
时间: 2023-08-25 12:15:27 浏览: 85
### 回答1:
好的,以下是一个简单的 Python 装饰器示例:
```python
def logger(func):
def wrapper(*args, **kwargs):
print('Calling function:', func.__name__)
return func(*args, **kwargs)
return wrapper
@logger
def add(x, y):
return x + y
result = add(3, 5)
print('Result:', result)
```
在这个示例中,我们定义了一个装饰器函数 logger,它接受一个函数作为参数,并返回一个新的函数 wrapper。wrapper 函数会在执行原始函数之前打印一条日志,然后调用原始函数并返回其结果。
我们使用 @logger 语法将装饰器应用到 add 函数上。当我们调用 add(3, 5) 时,实际上是在调用 wrapper 函数,这个函数会先打印一条日志,然后调用原始的 add 函数,最后返回结果。
当我们运行这个示例时,输出如下:
```
Calling function: add
Result: 8
```
可以看到,在调用 add 函数之前,logger 装饰器会先打印一条日志。这个示例只是一个简单的演示,实际上装饰器可以用于更复杂的场景,比如实现缓存、权限验证等功能。
### 回答2:
Python装饰器是一种高级特性,它可以在不修改已有代码的前提下给函数添加额外的功能。具体说,装饰器是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。通过装饰器,我们可以在不改变函数定义的情况下,对函数进行增强或修改。
举个例子,假设我们有一个计算函数的函数`calculate`,它接收两个参数`a`和`b`,并返回它们的和。我们希望在计算前先打印一条日志,来确认输入的正确性。这时,我们可以定义一个装饰器函数`log_decorator`,它接受一个函数作为输入,并返回一个新的函数,这个新函数先打印日志,然后再调用原来的函数。
下面是一个简单的Python装饰器示例:
```python
def log_decorator(func):
def wrapper(a, b):
print(f"Calculating {a} + {b}")
return func(a, b)
return wrapper
@log_decorator
def calculate(a, b):
return a + b
result = calculate(3, 4)
print(result)
```
在例子中,`log_decorator`是我们定义的装饰器函数。`@log_decorator`语法表示将`calculate`函数应用装饰器。当调用`calculate`函数时,实际上是调用了`wrapper`函数,它先打印日志,然后再调用原来的`calculate`函数。最后,我们打印出了计算结果。
这是一个简单的装饰器示例,实际上装饰器可以做的更多,比如在函数执行前后做一些操作,给函数添加缓存,修改函数的行为等等。装饰器为我们提供了一种灵活的方式来定制和增强函数的功能,使得我们可以写出更加优雅和可扩展的代码。
### 回答3:
Python装饰器是一种可以在不改变函数定义的情况下,为函数增加额外功能的语法。它可以用来修改一个函数的行为,而无需对原函数本身进行修改。
一个简单的Python装饰器示例可以是一个用于计时的装饰器。首先,我们定义一个装饰器函数,该函数接受一个函数作为参数,并返回一个新的函数来包装原函数。在新返回的函数中,我们可以在调用原函数前后打印出时间信息。
具体实现如下:
```python
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"函数{func.__name__}的执行时间为:{end_time - start_time}秒")
return result
return wrapper
@timer_decorator
def example_function():
time.sleep(2)
# 调用被装饰的函数
example_function()
```
在这个例子中,我们定义了一个装饰器函数`timer_decorator`,它接受一个函数`func`作为输入参数。在装饰器函数中,我们定义了另一个函数`wrapper`,该函数在调用被装饰函数前后打印时间信息并计算执行时间。最后,装饰器返回这个新函数`wrapper`。
在被装饰函数`example_function`上,我们使用了装饰器语法`@timer_decorator`来将装饰器应用于该函数。当我们调用`example_function`时,它实际上是调用了装饰器函数`timer_decorator`返回的`wrapper`函数。
通过这种方式,我们可以在不改变`example_function`定义的情况下,为其增加计时功能。这是Python装饰器的一个简单示例,可以方便地扩展函数的功能,提高代码的复用性和可读性。
阅读全文