装饰器
装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多初次接触这个知识的人来讲,这个功能有点绕,自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,这个都不会,别跟人家说你会Python, 看了下面的文章,保证你学会装饰器。
————————————————————————————————————
def w1(func):
def inner():
return “”+func()+””
return inner
@w1
def f():
return ‘天龙八部’
print(f())
python解释器就会从上到下解释代码,步骤如下:
1.def w1(func): ==>将w1函数加载到内存
2.@w1
没错, 从表面上看解释器仅仅会解释这两句代码,因为函数在 没有被调用之前其内部代码不会被执行。
从表面上看解释器着实会执行这两句,但是 @w1 这一句代码里却有大文章, @函数名 是python的一种语法糖。
上例@w1内部会执行一下操作:
执行w1函数
执行w1函数 ,并将 @w1 下面的函数作为w1函数的参数,即:@w1 等价于 w1(f) 所以,内部就会去执行:
def w1(func):
def inner():
return "<b>"+func()+"</b>" # func是参数,此时 func 等于 f()
return inner # 返回的 inner,inner代表的是函数,非执行函数 ,其实就是将原来的 f() 函数塞进另外一个函数中
w1的返回值
将执行完的w1函数返回值 赋值 给@w1下面的函数的函数名f() 即将w1的返回值再重新赋值给 f(),即:
新的f=def w1(func):
def inner():
return “”+旧的f()+””
return inner