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')
相關文章
相關標籤/搜索