码迷,mamicode.com
首页 > 编程语言 > 详细

python-day4-装饰器的使用

时间:2016-05-30 01:03:27      阅读:389      评论:0      收藏:0      [点我收藏+]

标签:

摘要:某公司的基础开发平台,有大概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

 

python-day4-装饰器的使用

标签:

原文地址:http://www.cnblogs.com/liguangxu/p/5540885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!