# 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')