python闭包学习

# 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')
相关文章
相关标签/搜索