一个简单的装饰器——
无参数传递
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做执行!