弄明白了python中的嵌套函数(也就是所谓的闭合函数)之后,再想搞懂python装饰器就简单多了。
如果要简单地说,python装饰器不过就是一个针对嵌套函数的语法糖
它的作用就是在函数调用方法不变的情况下,把此函数包装成另一个函数来使用一、首先来大致了解下嵌套函数:
被嵌套与一层函数中的二层函数可以记录上上一层函数作用域中的变量
举例:
- def foo(a):
- def subfoo(b):
- return(b + a)
- return(subfoo)
- f = foo('content') #由于foo返回的是subfoo,所以f是对subfoo的引用
- f('sub_') #因为subfoo记录了foo的参数变量'content',所以返回值为'sub_content'
二、嵌套函数和它的变种(装饰器)
以下两端代码,作用是相同的,前一个是大姑娘,后一个是女扮男装后的大姑娘
- def action(x):
- return(x)
- def action_pro(n):
- def warpper(x):
- return(n(x) * x)
- return(warpper)
- action = action_pro(action) #第一个action为自定义的伪装变量,第二个action为上边定义的action函数
- action(3) #此函数实际为warpper(3),返回值为9