python函数_装饰器(图解+讲解)

直接代码+图片,来介绍。简单粗暴。

def out1(f):
    print('1层')
    f()
    
    def insaid():
        print('2层')
    return insaid

@out1
def func_b():
    print('函数B')


func_b()  # 调用函数

内存图,堆栈
这个图和代码含义:(运行结果:图右上角白字部分,有些小)
首先看运行顺序,在逐个展开。
一、装饰器@out1,最先运行。所谓【装饰】,就是在最外层的,比方说:人的耳环,帽子,戒指等,都在人体最外层。根据python语言特点从上往下,从外到内依次运行——所以,装饰器最先运行的。
func_b=out1(func_b)就是把func_b放入了def out1(f)这个内存中了。

                   为啥没有先打印 "函数B" 这个词? 

python语言特点:从上到下依次运行.必须先从def out1(f)从上到下依次运行。如果把f()放在,print(‘1层’)上面,那就先执行print“函数B”。

f()是关键:f()它就是def func_b, func_b变成了def out1:函数的参数了。

装饰器:
1不修改已有函数的代码
2不修改已有函数的的调用方式
3给已有函数增加额外功能。

不加装饰器@out1,运行结果和原来一样。调用方式也一样。
调用时增加了func_b=out1(func_b)
这个代码等于func_b=out1(func_b)等同于@out1
加不加装饰器,调用方式都是 func_b() # 调用函数

def out1(f):
    print('1层')
    f()

    def insaid():
        print('2层')
    return insaid


def func_b():
    print('函数B')

func_b=out1(func_b)
func_b()  # 调用函数

这是装饰器运行的简单原理。
例如:带参数的装饰器、多个装饰器等等。
弄懂了这个图,学其他的装饰器就心中有底了。
一切皆对像。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值