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

  • 相关阅读:
    运用Python计算Π的多少(大致计算)
    运用python绘制小猪佩奇
    博客园使用指南 wiki
    博客园 — 打赏功能
    新SSM框架整合
    springMVC
    Eclipse转IDEA的配置!!
    Java学习小知识总结
    java-StringBuffer
    博客园自定义主题
  • 原文地址:https://www.cnblogs.com/alben-cisco/p/6906695.html
Copyright © 2011-2022 走看看