zoukankan      html  css  js  c++  java
  • 装饰器原理介绍和基本实现

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

             

  • 相关阅读:
    ASM ClassReader failed to parse class file- probably due to a new Java class file version that isn't supported yet问题
    Git配置工作
    Git多人协作
    Git分支合并
    网络收藏夹
    莫道桑榆晚,为霞尚满天
    2021幼升小
    2020年07月28日10:36:36
    JAVA中如果用BigDecimal做除法
    mybatis
  • 原文地址:https://www.cnblogs.com/my334420/p/6387688.html
Copyright © 2011-2022 走看看