装饰器
装饰器(Decorators)是修改其他函数的功能的函数。需要在不改变源代码的情况下修改已经存在的函数,常见的例子是增加一句调试声明,以便查看传入的参数。
装饰器本质上是一个函数,它把一个函数作为输入并且返回另一个函数。
def document_it(func): def new_function(*args, **kwargs): '''*args是非关键字参数,用于元组,**kw是关键字参数,用于字典''' print("Runing function: ", func.__name__) print("Positional arguments: ", args) print("Keyword arguments: ", kwargs) result = func(*args, **kwargs) print("Result: ", result) return result return new_function def add_ints(a, b): return a+b print(add_ints(3, 5)) cooler_add_ints = document_it(add_ints) # 人工对装饰器赋值 cooler_add_ints(3, 5)
单个装饰器
多个装饰器:先执行靠近定义函数的装饰器,再执行外面的装饰器。
''' 一个函数可以有多个装饰器 ''' def document_it(func): # 装饰器函数 def new_function(*args, **kwargs): '''*args是非关键字参数,用于元组,**kw是关键字参数,用于字典''' print("Runing function: ", func.__name__) print("Positional arguments: ", args) print("Keyword arguments: ", kwargs) result = func(*args, **kwargs) print("Result: ", result) return result return new_function def square_it(func): def new_function(*args, **kwargs): result = func(*args, **kwargs) return result*result return new_function ''' 靠近函数定义的装饰器最先执行,然后依次执行上面的。 ''' @document_it @square_it def add_ints(a, b): return a+b print(add_ints(3, 5)) print("ending")