python-day4-装饰器的使用

Posted ppppppy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于python-day4-装饰器的使用的主要内容,如果未能解决你的问题,请参考以下文章

python-day14--带参数的装饰器+多个装饰器装饰同一个函数

基础学习之第十二天(装饰器的进阶)

python-day04 内置函数和函数装饰器

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码

代码缺乏装饰?使用ts装饰器来装饰你的代码