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

             

  • 相关阅读:
    代码写界面的工厂类
    Masonry的一些等间距布局
    开发中的小细节随记
    ios7 实现应用内保真截屏
    利用GCD实现单利模式的宏代码
    AVAudioPlayer的锁屏播放控制和锁屏播放信息显示
    NSXMLParser自定义的一个xml解析工具
    利用NSURLSession完成的断点续传功能
    AVFoundation下的视频分帧处理
    Redis自学笔记:4.2进阶-过期时间
  • 原文地址:https://www.cnblogs.com/my334420/p/6387688.html
Copyright © 2011-2022 走看看