Python函数装饰器@funA

一、函数装饰器

     在python中函数装饰器就是使用一个函数,用@这个函数 再接一个被装饰函数的用法:     

#funA 作为装饰器函数
    def funA(fn):
        #...
        fn() # 执行传入的fn参数
        #...
    return '...'

    @funA

    def funB():
    #...

  以上等价于:

1. def funA(fn):
2. #...
3. fn() # 执行传入的fn参数
4. #...
5. return '...'
6.
7. def funB():
8. #...
9.
10. funB = funA(funB)

    因此,使用函数装饰器 funA() 去装饰另一个函数 funB(),其底层执行了如下 2 步操作:

1. 将funB 作为参数传给 funA() 函数;
2. 将funA()函数执行完成的返回值反馈回funB,此时函数名funB已不是原来的funB(),而是经过funA()装饰函数的返回值(funB = funA(funB)),返回值可能是普通变量也可能是函数,从而funB可能是普通变量也可能是函数。

    举一个实例:

def funA(fn):
      print("C语言中文网")
      fn()
      print("http://ttt.net")
      return "装饰器函数的返回值"

@funA
def funB():
    print("学习python")

    程序执行结果为:

C语言中文网 
学习 Python 
http://c.ttt.net

    如果在程序末尾添加语句:

print(funB)

    则返回结果增加输出:

装饰器函数的返回值

     被“@函数”修饰的函数不再是原来的函数,而是被替换成一个新的类型(取决于装饰器的返回值),即如果装饰器函数的返回值为普通变量,那么被修饰的函数名就变成了变量名;同样,如果装饰器返回的是一个函数的名称,那么被修饰的函数名依然表示一个函数。

    所谓函数装饰器,就是通过装饰器函数,在不修改原函数的前提下,来对函数的功能进行合理的扩充,即通过funA 对 funB函数进行了功能扩充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值