python高级进阶_6_通俗易懂理解装饰器的原理01

理解装饰器之前,先看下这个代码 :

def  test():
	print("testing")
def test():
   print(" love ")

test()

大家猜猜 打印的什么 ?

答案是 love

为了 好理解, 我们先看以下 这个就好理解了

a=2   # 首先开辟一段内存, 让 a 指向2   
a=3   #  又开辟一段内存, 然后让a 指向 3,  2 这块内存没有指针指向 ,垃圾回收就回收掉
print(a)  #  3  

同理就可以理解上边的吧 ,

def  test():    #函数名 test  指向函数体  print(“testing)
	print("testing")   
def test():  函数名 test  指向函数体  print(”“love)   , 前面的 print(”testing‘)会被回收了 
   print(" love ")

test()   # 执行 当然是 print(“love”)

现在我们的问题是 在不改变方法的情况下,如何扩展功能呢? 这个好像是个难题,不改代码就能增加功能,感觉匪夷所思。

这个不能难道我们的优秀的开发者 。


def test(func):
    def test_in():
        print("testing")
        func()
    return test_in

def f1():
    print("---f1----")

f1=test(f1)
f1()

咱们直接看答案 是:
testing
—f1----
看到了吗 , 已经实现了不改代码的情况下, 已经改变了函数功能 。 神奇吧

解析如下:

  1. test(f1) 有两层关系 1. f1 代表是 f1函数名的指针当作参数传入 test() , 2. test(f1) 代表 返回test_in 函数指针
  2. f1=test(f1) 把test_in 函数指针赋值给 f1 ,f1 的函数指针 有 指向 print(“----f1----")变成了test_in里的函数体
  3. f1() 执行test_in 里的函数体

其中test 函数 就是一个闭包函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值