首页 > 技术文章 > Python_装饰器

xieyi-1994 2020-11-14 16:34 原文

装饰器

装饰器(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")

 

 

推荐阅读