06-python中的装饰器

java类中, 有一系列的装饰器, 尤其对文件的操作, python的装饰器比较简单, 直接上代码

#!/usr/bin/env python3
#coding:utf-8
'''
python的装饰器

包装原函数, 添加   @+装饰器函数名   注解

实质是把 Fun1 重新赋值为 wrapper

函数只有名代表这个函数, 带括号相当于执行这个函数

'''

# 装饰器
def outer(fun):
    def wrapper(arg):
        print('outerrerere')
        result = fun(arg)
        print('enddddd...')
        return result

    return wrapper


@outer
# @outer = outer(Fun1)
def Fun1(arg):
    print('func1', arg)
    return arg

@outer
def Fun2(arg):
    print('func2', arg)
    return arg


rrr = Fun1('alex')
print(rrr,'123')
Fun2('alex')

 

然后, 可能会有带有参数的

#!/usr/bin/env python3
#coding:utf-8
'''
带参数的装饰器, 传入函数的

'''

def Fileter(before_func, after_func):
    def outer(main_func):
        def wrapper(request, args):
            before_result = before_func(request, args)
            if (before_result != None):
                return before_result

            main_result = main_func(request, args)
            if (main_result != None):
                return main_result

            after_result = after_func(request, args)
            if (after_result != None):
                return after_func

        return wrapper
    return outer


@Filter(AccountFilter.Before, AccountFilter.Afeter)
def List(request, args):
    pass

 

posted @ 2017-07-13 14:20  bronk  阅读(228)  评论(0编辑  收藏  举报