装饰器原理与递归

 一个简单的装饰器——

无参数传递

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

 

posted @ 2017-05-26 02:02  alben-xue  阅读(221)  评论(0编辑  收藏  举报