闭包和装饰器都是属于函数的语法范畴,是在函数定义中以另一个函数做为形参的语法机制。
1 闭包(Closurer)
闭包是定义内部函数的一种语法规则,要理解闭包,请看下面的实例:def outer(t):
....print(t)
....def inner(i):
........return t+i
....return inner
tf1 = outer(200)
tf2 = outer(300)
print(tf1(20))
print(tf2(20))
'''
200
300
220
320'''
闭包是一种函数嵌套的机制,如上例的inner(),在inner()中引用了inner()以外、outer()以内的局部变量,而outer返回inner。
装饰器(Decorator)
装饰器主要是利用闭包外层函数能返回内层函数的功能,用来装饰函数,给函数快速增加附加的功能。def decor(f):
....def new_f(x,y):
........print('参数1为%d,参数2为%d' %(x,y))
........return f(x,y)
....return new_f
@ decor
def add(x,y):
....return x+y
print(add(5,7))
'''
参数1为5,参数2为7
12
'''
语句@ decor表示使用装饰器来装饰add(),实际上是执行decor(add)()。本质上就把add函数当做参数传递到decor函数,decor(add)返回的是new_f,add是new_f函数的一个变量。
-End-