您的位置:首页 > 编程语言 > Python开发

由浅入深,走进Python装饰器-----第二篇:进阶1

2019-04-13 21:59 776 查看

上一篇:由浅入深,走进Python装饰器-----第一篇:基础

  1. 装饰器可以嵌套使用

  2. 装饰器可以是类,也可以是函数;  装饰器可以修饰函数,也可以修饰类

  3. 装饰器的使用种类:

    @函数

       被装饰函数

  4. @函数

        被装饰类

  5. @类

        被装饰函数

  6. @类

        被装饰类

 

  • 装饰器的嵌套:   下层装饰器修饰后的函数, 再次被上层装饰器修饰

def kuozhan(f):
def inner():
print("1我是扩展函数,接收外部传进来的新old :",f)
f()
print("4我是扩展函数,我在新old函数后显示")
return inner
    
def outer(f):
def inner():
print("2我是outer函数,接收外部传进来的old :",f)
f()
print("3我是outer函数,我在old函数后显示")
return inner

@kuozhan             #old = kuozhan(outer(old))
@outer              #old = outer(old)
def old():
print("我是old函数")
                                                 
old()

>>>1 我是扩展函数,接收外部传进来的新old : <function outer.<locals>.inner at 0x000000000250AB70>
>>>2 我是外部传进来的old : <function old at 0x000000000250AAE8>
>>>  我是old函数
>>>3 我是修饰工,我在旧函数后显示
>>>4 我是扩展函数,我在新old函数后显示


@函数

   被装饰函数


  • 对带参数的原函数进行修饰

  • 默认将old函数的参数传给outer里面的第一层函数

def outer(f):
def inner(var):
print("1 我是outer函数,接收外部传进来的old :",f)
print("1 我是outer函数,接收外部传进来的old的参数 :",var)
f(var)
print("3 我是outer函数,我在old函数后显示")
return inner

def inner2(var):
    pass

@outer                                     #old = outer(old)
def old(var):
print("2 我是old函数","参数: "var)

var = '音乐'                                                
old(var)

>>>1 我是outer函数,接收外部传进来的old : <function old at 0x00000000024DAA60>
>>>1 我是outer函数,接收外部传进来的old的参数 : 音乐
>>>2 我是old函数 参数:  音乐
>>>3 我是outer函数,我在old函数后显示


  • 对多参数的原函数进行修饰

def outer(f):
def inner(a, b,*args,d,**kwargs):
print("1 我是outer函数,接收外部传进来的old :",f)
print("1 我是outer函数,接收外部传进来的old的参数 :\
普通参数a={}, 默认参数b={}, 多余的普通参数:{}和{}".format(a,b,args[0],args[1]))
print("1 我是outer函数,接收外部传进来的old的参数 :\
命令关键字参数d:{}, 多余的关键字参数:{}和{}".format(d,kwargs["key1"],kwargs["key2"]))
f(a,b, *args,d=4,**kwargs)
print("3 我是outer函数,我在old函数后显示")
return inner

@outer                                     #old = outer(old)
def old(a, b=2, *args,d,**kwargs):         #五种参数
print("2 我是old函数",
"普通参数a={0}, 默认参数b={1}, 多余的普通参数:{2}和{3},\
命令关键字参数d:{4}, 多余的关键字参数:{5}和{6}"\
.format(a,b,args[0],args[1],d,kwargs["key1"],kwargs["key2"]))
dict1 = {"key1":"value1","key2":"value2"}
old(1,22,'args1','args2',d=4,**dict1)

>>> 1 我是outer函数,接收外部传进来的old : <function old at 0x00000000024AAAE8>
>>> 1 我是outer函数,接收外部传进来的old的参数 :     普通参数a=1, 默认参数b=22, 多余的普通参数:args1和args2
>>> 1 我是outer函数,接收外部传进来的old的参数 :     命名关键字参数d:4, 多余的关键字参数:value1和value2
>>> 2 我是old函数 普通参数a=1, 默认参数b=22, 多余的普通参数:args1和args2,命名关键字参数d:4, 多余的关键字参数:value1和value2
>>> 3 我是outer函数,我在old函数后显示


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: