• 装饰器原理与递归


     一个简单的装饰器——

    无参数传递

    def hi(fun):
        def inner():
            print("Welcome " )
            fun()
        return inner
    
    @hi
    def hello():
        print("hello world" )
    
    hello()

    装饰器工作原理:

     1,@是装饰器符号,在这里装饰器实施下列工作:

          1.1 把被装饰函数的函数名作为实参传递给装饰器函数(所以在配置装饰器的时候,必须保留一个形参,否则报错),也就是说运行装饰器就是运行hi(hello)

          1.2 装饰器自动运行,等于说执行函数 hi(hello),在hi函数体中,定义了一个新的函数inner,并且直接return该函数名“inner”

          1.3 对hello函数进行重新赋值,hello = inner(),在inner函数内有两个动作

                1.3.1 执行 print("welcome")

                1.3.1 fun()  这里的fun是hi函数的形参,也就是hello()函数的函数名hello那么fun()就是等于hello()[老的hello函数]

     2,所以我们在程序中执行hello()其实就是对1.3步骤重新定义的hello做执行!

  • 相关阅读:
    PHP学习之字符串
    PHP学习之常量
    PHP之数据类型
    AngularJS学习之Select(选择框)
    Angular JS 学习之Http
    PHP之echo/print
    Angular JS 学习之服务(Service)
    Angular JS 学习之过滤器
    git打包
    gdb分析core文件
  • 原文地址:https://www.cnblogs.com/alben-cisco/p/6906695.html
Copyright © 2020-2023  润新知