转载
这是我自己的理解,如有不妥,请指正
其实弄明白了python中的嵌套函数(也就是所谓的闭合函数)之后,再想搞懂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'
二、嵌套函数和它的变种(装饰器)
以下两端代码,作用是相同的,前一个是大姑娘,后一个是女扮男装后的大姑娘
Python代码 收藏代码
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
将上边代码改写:
Python代码 收藏代码
def action_pro(n):
def warpper(x):
return(n(x) * x)
return(warpper)
@action_pro #用action_pro函数把action包装成warpper
def action(x):
return(x)
action(3) #此函数实际为warpper(3),返回值为9