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

             

  • 相关阅读:
    移动端小tips
    是否该放弃东莞的工作
    读书有感-learn html5 and javascript for ios
    eNSP多路由实现互联互通(华为路由E口直连)
    iTextSharp操作表格排版问题
    我今天开通博客
    12年的女程序员重新回归
    前端css样式规划
    前端神器-webstorm2017
    远程桌面资料共享
  • 原文地址:https://www.cnblogs.com/my334420/p/6387688.html
Copyright © 2011-2022 走看看