1 通过下面的代码了解闭包的特性
def outer(arg1): print 'im outer and ' + arg1 def middle(arg2): print 'im middle' def inner(func): print 'im inner' return func(arg2) return inner return middle print outer('kokok')(123)(lambda x: x)
也相当于调用
f_middle = outer('kokok') # return middle f_inner = f_middle(123) # return inner func_result = f_inner(lambda x: x) # return the result of func(arg2) print func_result
out:
im outer and kokok im middle im inner 123
2 闭包的特点:
2.1 inner 能访问 outer 及其祖先函数的命名空间内的变量(局部变量、函数参数)
2.2 调用 outer 已经返回了,但是他的命名空间被返回的 inner 对象引用,所以不会被回收