在Python中,装饰器是一种高级Python语法。装饰器本质上是一个接受函数作为参数并返回新函数的可调用对象。它们为程序员提供了一种优雅的方式来修改函数的行为,或者在不改变函数源代码的前提下,给函数添加新的功能。
那么,装饰器是如何工作的呢?让我们通过一个简单的例子来了解。
def simple_decorator(f):
def wrapper():
print("Something is happening before the function is called.")
f()
print("Something is happening after the function is called.")
return wrapper
@simple_decorator
def say_hello():
print("Hello!")
say_hello()
在这个例子中,我们定义了一个名为simple_decorator
的装饰器,它接收一个函数f
作为参数,并定义了一个新的函数wrapper
,在调用f
之前和之后执行一些操作。通过在say_hello
函数上方添加@simple_decorator
,我们将say_hello
函数传递给装饰器,并且say_hello
现在实际上调用的是wrapper
函数。
运行上面的代码,你会看到以下输出:
Something is happening before the function is called.
Hello!
Something iter the function is called.
这展示了装饰器如何在不更改原函数定义的情况下,轻松地扩展函数的功能。
除了简单的装饰器外,Python还支持带参数的装饰器。这种装饰器可以接收额外的参数,使得装饰器的应用更为灵活。下面的例子演示了如何使用一个带参数的装饰器来记录函数的执行时间。
```python
import time
def timing_decorator(