• python 叠加装饰器详解


    def out1(func1):   #7.func1=in2的内存地址,就是in2
        print('out1')
        def in1():     #8.调用函数index() 因为函数在in1里,所以首先运行in1,
            print('in1')
            res1 = func1()  #9.运行到这因为func1=in2,此时就去调用in2了
            print('in11')   #17.in2调用结束,该层继续执行至结束,程序运行完毕
            return res1
        return in1
    def out2(func2):   #5.func2=in3的内存地址 其实就是in3
        print('out2')
        def in2():   #10.in1调用in2
            print('in2')
            res2=func2()  #11.运行到这一步因为要运行func2(),但func2是in3,所以调用in3
            print('in22')  #16.in3调用结束,该层继续执行至结束
            return res2
        return in2
    def out3(func3):   #3.func3=index的内存地址,就是最原始的index
        print('out3')
        def in3():   #12.程序开始调用in3 开始运行
            print('in3')
            res3=func3()     #2.func3=index   13.好了,到了我们的目标了此时开始运行index,接着往下
            print('in33')    #14.打印
            return res3      #15.此时程序返回结束
        return in3
    @out1    #6.out1=out1(in2) out1同样装饰的就是in2了  并且运行结果为in1,所以此时index被传递给了in1
    @out2    #4.out2=out2(in3) out2会向下面@out3也就就是in3要函数 此时in3被装饰,
    # 返回结果为in2,此时index被传递给in2 改行代码运行结果其实就是函数in2
    @out3    #1.out3=out3(index)    out3运行结果返回值为in3,此时index被in3带走
             ##所以在函数的加载阶段就是自下至上
    def index():#程序在13步运行完毕
        print('叠加装饰器又怎么样?')   #程序开始打印至结束
    
    index()

    有错误望各路大神指正谢谢!

  • 相关阅读:
    javaSE笔记-多态
    javaSE笔记-接口
    javaSE笔记-static关键字
    javaSE笔记-fianl关键字
    javaSE笔记-抽象类
    javaSE笔记-继承
    javaSE笔记-JKD、JRE、JVM各自的作用和关系
    搭建网络验证RIP协议
    计算机网络学习
    python itertools 模块讲解
  • 原文地址:https://www.cnblogs.com/5j421/p/10046417.html
Copyright © 2020-2023  润新知