函数的装饰器可以通俗理解为对函数起装饰作用,起到功能增强的功能。
让我们通过一个简单的例子来看看装饰器函数的写法:
from functools import wraps
def dereactor(func):
@wraps(func)
def wapper():
print("在调用%s函数前的一些操作处理"%(func.__name__))
func()
print("在调用函数%s的后置处理"%(func.__name__))
return wapper()
@dereactor
def test_func():
print('这是一个测试函数')
#输出:在调用test_func函数前的一些操作处理
#这是一个测试函数
#在调用函数test_func的后置处理
'''带参数的装饰器'''
def a_decorator_passing_arguments(function_to_decorate):
def a_wrapper_accepting_arguments(arg1, arg2):
print("I got args! Look: {0}, {1}".format(arg1, arg2))
function_to_decorate(arg1, arg2)
return a_wrapper_accepting_arguments
# 因为最终被调用是被装饰器返回的函数,即wrapper,
# 所以将参数传递给wrapper会将这些参数传递给被装饰的函数
@a_decorator_passing_arguments
def print_full_name(first_name, last_name):
print("My name is {0} {1}".format(first_name, last_name))
print_full_name("Peter", "Venkman")