装饰器原理介绍和基本实现

def foo():

  print'foo'

 

  foo//表示是函数  打印内存地址

   foo()//表示执行foo函数 

===========================

def foo():

  print'foo'

foo=lambda x:x+1

foo()//执行下面的lambda表达式,而不是原来的f

===============================

def login(func):   //func=tv

  def inner(*args,**kwargs):  //zy传给arg

    print("passed user verification......")

        return func(*args,**kwargs) //tv

  return inner

      

//@login

def home(name):

  print("welcome  [%s]to home page"%name)

def tv(name,passwd=123):

  print("welcome  [%s]to tv page"%name)

      return 4

@login

def moive(name):

  print("welcome  [%s]to moive page"%name)

 

//tv=login(tv)------传tv的内存地址

t=tv("zy",passwd="123")

print t

movie(“zy”)

=============================================

 

def Login(request,kargs):

  print('before')

def Error(request,kargs):

  print('after')

 

def filter(before_func,after_func):

  def outer(main_func):

    def wrapper(request,kargs):

           before_result=before_func(request.kargs)

           if(before_result!=None):

          return before_result:

 

        

       main_result=main_func(request.kargs)

           if(main_result!=None):

          return main_result:

 

                  after_result=after_func(request.kargs)

           if(after_result!=None):

          return after_result:

 

    return wrapper

  return outer

 

 

 

@Filter(Login,Error)

def Index(request,kargs):

   print("index")

  return ''home page"

 

Index('zy','zlj')

=======================

@w1

def show():

  pass

1.执行w1,把自己装饰的函数的函数名当做参数,w1(show)

2.show函数重新定义,新show=w1(show)返回值

================================

def w1(main_func):

  def outer(request.kargs):

    print("before")

    main_func(request,kargs)

            print("after")

  return outer

@w1

def show():

  print('show')

 

 

         

 

posted @ 2017-02-10 19:23  张兮兮  阅读(272)  评论(0编辑  收藏  举报