python-day4-装饰器的使用

摘要:某公司的基础开发平台,有大概N多个函数,boss要求小A,为每个函数添加权限验证功能,而且要求不得修改函数内部结构,让小A尝试从代码外部入手,作为新手小A来讲,这无疑是一个巨大的工作量,难道TM的要一个一个加到里面不可么~~~~生无可恋的小A无奈的望着桌面,在扫过谷歌浏览器图标的那一刻,突然一紧,于是机智的打开谷歌搜索,欲寻到一个简单的方法,经过搜索在一个叫银角大王的lowB博客里面找到了一个叫做装饰器的东东,然后耐心的看了下去……

图解python装饰器的执行流程

 

 1 #装饰器的使用
 2 # 自动执行outer函数并且将其下面的函数名f1当作参数传递
 3 # 将outer函数的返回值,重新赋值给f1
 4 #  1、遇到def outer(func) 加载到内存,跳过函数体
 5 #  2、遇到@outer,将f1作为参数传入func中
 6 #  3、遇到def inner():将函数加载到内存跳过函数体
 7 #  4、遇到return inner,将inner函数作为整体,赋值给f1
 8 #  5、遇到f1(),调用inner函数体,执行print(‘log’)
 9 #  6、遇到return func() 执行作为参数传入func中的老的f1函数的函数体print('F1')
10 #  7、遇到return 'lululu'将lululu传回f1()中
11 def outer(func):
12     def inner():
13         print('log')
14         return func()
15     return inner
16 @outer
17 def f1():
18     print('F1')
19     return 'lululu'
20 print(f1())
21 >>>log
22 >>>F1
23 >>>lululu
#带参数的传递
def outer(func):
    def inner(a):
        print('before')
        r=func(a)
        print('after')
        return r
    return inner

@outer
def f1(arg):
    print(arg)
    return 'lululu'
print(f1('huhuh'))
>>>before
>>>huhuh
>>>after
>>>lululu

#万能参数传递
def outer(func):
    def inner(*args,**kwargs):
        print('before')
        r=func(*args,**kwargs)
        print('after')
        return r
    return inner
@outer
def f1(arg):
    print('f1函数体',arg)
    return 'lululu'
print('返回值',f1('huhuhu'))
>>>before
>>>f1函数体 huhuhu
>>>after
>>>返回值 lululu

@outer
def f2(a1,a2):
    print('f2函数体','F2')
    return 'aa' 'bb'
print('返回值',f2('hu','lu'))
>>>before
>>>f2函数体 F2
>>>after
>>>返回值 aabb

 

posted @ 2016-05-30 00:10  ppppppy  阅读(199)  评论(0编辑  收藏  举报