详解python中的装饰器( 二 )


if key in cache:
return cache[key]
result = func(*args, **kwargs)
cache[key] = result
return result
return wrapper
@cache
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10))
print(fibonacci(20))
```
在上面的例子中,我们定义了一个装饰器`cache`,它用来缓存函数执行结果 。在内部函数`wrapper`中,我们定义了一个字典`cache`,用来保存函数执行结果 。如果函数的参数和关键字参数相同,就直接返回缓存结果,否则执行函数并将结果缓存起来 。最后,我们将装饰器应用到函数`fibonacci`上,即可实现函数的缓存功能 。
四、实现原理
装饰器的实现原理其实非常简单,它本质上就是一个函数嵌套函数的过程 。当我们将装饰器应用到函数上时,Python会自动将原函数作为参数传递给装饰器函数,并将返回值替换原函数 。下面是一个示例,展示装饰器的实现原理:
```python
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before the function is called.")
result = func(*args, **kwargs)
print("After the function is called.")
return result
return wrapper
@my_decorator
def my_function():
print("The function is called.")
my_function()
```
在上面的例子中,当我们调用`my_function`函数时,Python会将其转换为以下代码:
```python
my_function = my_decorator(my_function)
my_function()
```
这样就可以将原函数替换为装饰器函数,从而实现函数的增强或修改 。
五、

推荐阅读