# coding=utf-8 __author__ = 'chenglp' # 闭包原理一个函数返回另外一个函数,在返回时不去执行,而再次调用时才去执行。 def func(name): def inner_func(age): print 'name:', name, 'age:', age return inner_func bb = func('my') #这里‘my’为自由变量,func执行完了,依然存在,由于被inner_func闭包引用了。 bb(24) # name: my age: 24 #闭包应用于python的装饰器 def decorator_func(func): print 'decorator_func call' def wrapper(*args, **kwargs): print 'wrapper call' return func(*args, **kwargs) return wrapper @decorator_func def func(name): print 'name:', name #至关于decorator_func(func), func('chenglp')# wrapper call \n name: chenglp #多个闭包用来实现复杂的可接受参数的装饰器 def my_decoratro_func(params): print 'params decorator_func call params:', params def decorator_func(func): print 'decorator_func call params', params def wrapper(*args, **kwargs): print 'wrapper call params', params return func(*args, **kwargs) return wrapper return decorator_func @my_decoratro_func(params=1)#params被闭包decorator_func引用,被wrapper引用,为自由参数 def func(name): print 'name:', name func('chenglp')