Enclosed->Global->Built-in`也就是先在局部作用域內(例如函數內)進行查找,然后在[閉包]1內查找,接下來分別是全局作用域和內置的保留名稱注意:閉包內的變量,不能改變,但是對于列" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python 裝飾器做緩存

系統 1675 0

使用裝python飾器做緩存

裝飾器在之前的文章中有講過,這里主要是說了裝飾器的用法和應該怎么理解。這片文章給出一片補充:主要說在緩存方面的應用。

在此之前呢,需要補充一些知識點:就是 python 查找變量的順序是什么?

            
              答案就是LEGB原則:也就是`Local -> Enclosed -> Global -> Built-in`

            
          

也就是先在局部作用域內(例如函數內)進行查找,然后在[閉包] 1 內查找,接下來分別是全局作用域和內置的保留名稱


注意:閉包內的變量,不能改變,但是對于列表類型或是字典類型的話,可以進行修改內部的值。這也是用裝飾器作為緩存的關鍵地方!

代碼如下:主要是cache函數, 可以運行起來,然后訪問本機8089端口,多次刷新,就會發現變化了!(注意鏈接后面要加參數x=1)
有什么問題可以在評論區討論呦,多多交流!

            
              
                # coding=utf8
              
              
                import
              
               tornado

              
                from
              
               tornado
              
                .
              
              web 
              
                import
              
               RequestHandler

              
                from
              
               tornado
              
                .
              
              ioloop 
              
                import
              
               IOLoop

              
                from
              
               functools 
              
                import
              
               wraps



              
                def
              
              
                cache
              
              
                (
              
              func
              
                )
              
              
                :
              
              
    x 
              
                =
              
              
                [
              
              
                0
              
              
                ]
              
              

    @wraps
              
                (
              
              func
              
                )
              
              
                def
              
              
                wrapper
              
              
                (
              
              
                *
              
              args
              
                ,
              
              
                **
              
              kwargs
              
                )
              
              
                :
              
              
                # print args, kwargs
              
              
        self 
              
                =
              
               args
              
                [
              
              
                0
              
              
                ]
              
              
                # x.append(args[0])
              
              
        x
              
                [
              
              
                0
              
              
                ]
              
              
                +=
              
              
                int
              
              
                (
              
              self
              
                .
              
              get_argument
              
                (
              
              
                "x"
              
              
                )
              
              
                )
              
              
                print
              
               x
        
              
                return
              
               func
              
                (
              
              
                *
              
              args
              
                ,
              
              
                **
              
              kwargs
              
                )
              
              
                return
              
               wrapper


              
                class
              
              
                MainHandler
              
              
                (
              
              RequestHandler
              
                )
              
              
                :
              
              

    @cache
    
              
                def
              
              
                get
              
              
                (
              
              self
              
                ,
              
              
                *
              
              args
              
                ,
              
              
                **
              
              kwargs
              
                )
              
              
                :
              
              
                # print "yes"
              
              
                # print self.get_argument("x")
              
              
        self
              
                .
              
              write
              
                (
              
              
                "yes!"
              
              
                )
              
              
                def
              
              
                post
              
              
                (
              
              self
              
                ,
              
              
                *
              
              args
              
                ,
              
              
                **
              
              kwargs
              
                )
              
              
                :
              
              
        self
              
                .
              
              write
              
                (
              
              
                "hello!"
              
              
                )
              
              
                def
              
              
                make_app
              
              
                (
              
              
                )
              
              
                :
              
              
                return
              
               tornado
              
                .
              
              web
              
                .
              
              Application
              
                (
              
              handlers
              
                =
              
              
                [
              
              
                (
              
              r
              
                "/"
              
              
                ,
              
               MainHandler
              
                )
              
              
                ]
              
              
                )
              
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
    app 
              
                =
              
               make_app
              
                (
              
              
                )
              
              
    app
              
                .
              
              listen
              
                (
              
              
                8089
              
              
                )
              
              
    IOLoop
              
                .
              
              current
              
                (
              
              
                )
              
              
                .
              
              start
              
                (
              
              
                )
              
            
          

  1. 閉包:就是函數內的函數引用內部函數外的變量,這個函數就是個閉包. ??


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 清新县| 商水县| 潍坊市| 新乐市| 正阳县| 泉州市| 双鸭山市| 芮城县| 环江| 新丰县| 竹山县| 阿拉善左旗| 新津县| 博白县| 永城市| 安康市| 雷州市| 黄平县| 容城县| 宣恩县| 泽州县| 浦城县| 镇原县| 尚志市| 千阳县| 屏东县| 将乐县| 兴化市| 巫溪县| 麻栗坡县| 翼城县| 辽阳县| 安泽县| 临西县| 伊宁县| 莫力| 醴陵市| 东乌| 确山县| 宽甸| 富阳市|