python装饰器的使用

借用装饰器,我们可以批量的对老的函数进行改造或扩展老函数功能,比如需要对函数的接收参数进行过滤,Flash的url路由功能就是使用的这个方式

def dropoushu():  # 这一层函数可以去掉,如果去掉了,则使用@checkjiou这种方式调用该装饰器
    def checkjiou(func):
        def wrapper(*args):
            tmp_list = args[0]
            result_list = [i for i in tmp_list if i%2 ==0]  # 对calculate函数的入参list中的奇数过滤掉
            return func(*tuple([result_list]))  # result_list=[0, 2, 4, 6]
        return wrapper
    return checkjiou

@dropoushu()
def calculate(a_list):
    print a_list  # [0, 2, 4, 6]

if __name__ == "__main__":
    calculate([i for i in range(7)])  # 此处的数据应该是[0, 1, 2, 3, 4, 5, 6]

猜你喜欢

转载自www.cnblogs.com/gangdou/p/9210911.html