zoukankan      html  css  js  c++  java
  • 装饰器原理与递归

     一个简单的装饰器——

    无参数传递

    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做执行!

  • 相关阅读:
    Android通知栏介绍与适配总结
    Java emoji持久化mysql
    css自适应
    常用网址总结
    前端开发常用技巧
    JAVA问题集锦Ⅰ
    Android之常见问题集锦Ⅱ
    Java集合之ConcurrentHashMap.addCount解析
    Java集合之ConcurrentHashMap解析
    Java数据结构之Map
  • 原文地址:https://www.cnblogs.com/alben-cisco/p/6906695.html
Copyright © 2011-2022 走看看