Python 中的装饰器是一种非常强大的工具,可以让我们方便地修改函数或者类的行为。装饰器本质上是一个特殊的函数,接受一个函数或者类作为参数,并且返回一个新的函数或者类。
def my_decorator(func): def wrapper(*args, **kwargs): print('Before function is called.') result = func(*args, **kwargs) print('After function is called.') return result return wrapper @my_decorator def my_function(): print('Function is called.') my_function()
上面的例子演示了一个简单的装饰器,当 my_function 被调用时,会先执行 my_decorator 函数,并且在执行 my_function 函数的前后打印一些信息。
可以看到,装饰器的使用非常方便,通过在函数上添加 @my_decorator 装饰器就可以完成函数行为的修改。如果要取消装饰器的效果,只需要在函数上添加 @my_decorator 装饰器即可。
def my_function(): print('Function is called.') @my_decorator def my_function_decorated(): print('Function is called.') my_function() my_function_decorated()
装饰器还可以接受参数,这样就可以让装饰器更加灵活。下面是一个接受参数的装饰器示例:
def repeat(num): def my_decorator(func): def wrapper(*args, **kwargs): for i in range(num): func(*args, **kwargs) return wrapper return my_decorator @repeat(num=3) def my_function(): print('Function is called.') my_function()
上面的例子定义了一个 repeat 装饰器,接受一个 num 参数,表示要重复执行多少次被装饰的函数。当使用 @repeat(num=3) 装饰 my_function 函数时,my_function 会被重复执行 3 次。