第八个demo-函数装饰器

了解内容
@staticmethod和@clasmethod的本质就是函数装饰器
staticmethod和classmethod都是Python内置的函数
函数装饰器的用法
使用@符号用已有的函数(比如@staticcmethod、@classmerhod)后,可用于修饰其他函数
函数装饰器的本质
当程序使用“@函数”(比如函数A)装饰另一寒素(比如函数B)时,实际上完成如下两步:

(1)将被修饰的函数(函数B)作为参数传给@符号引用的寒素(函数A)
(2)将函数B替换(装饰)成第1步的返回值。

#fo1函数,该函数将打算作为寒素装饰器使用
#作为函数装饰器使用的函数,它必须定义一个形参
def fo1(fn):
    print("fo1函数")
    print(fn)
    return 'wk1'
#被装饰的函数
@fo1
def bar():
    print('bar函数')
'''
函数装饰器的本质:
 1)将被装饰器的函数(bar)作为参数传给装饰器函数(fo1)
 2)被装饰的函数(bar)将被替代装成修饰器函数(fo1)的返回值
'''
print(bar)#bar被装饰一被替换成装饰器的返回值:wk1
#由于bar其实已经被替换成了wk1,因此bar函数不能被调用
bar()

成功的价值

#fo1函数,该函数将打算作为函数装饰器使用
#作为函数装饰器使用的函数,它必须定义一个形参
def fo1(fn):
    print("fo1函数")
    def nonename(*args):
        print('***noname函数***')
        print("-----模拟在目标方法之前织入的Advice-----")
        fn(*args)
        print("-----模拟在目标方法之后织入的Advice-----")
    return nonename

#被装饰的函数
#1)test函数会被作为参数传给fo1()装饰器函数
#2)test函数就被替换成fo1装饰器函数的返回值(noname)
@fo1
def test(a, b):
    print('test函数')
    print('参数a:',a)
    print('参数b:',b)

#表面上是调用test函数,实际上是调用fo1装饰器函数的返回值(noname)
test(2,4)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值