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

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python 裝飾器做緩存

系統(tǒng) 1761 0

使用裝python飾器做緩存

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

在此之前呢,需要補(bǔ)充一些知識(shí)點(diǎn):就是 python 查找變量的順序是什么?

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

            
          

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


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

代碼如下:主要是cache函數(shù), 可以運(yùn)行起來,然后訪問本機(jī)8089端口,多次刷新,就會(huì)發(fā)現(xiàn)變化了!(注意鏈接后面要加參數(shù)x=1)
有什么問題可以在評(píng)論區(qū)討論呦,多多交流!

            
              
                # 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. 閉包:就是函數(shù)內(nèi)的函數(shù)引用內(nèi)部函數(shù)外的變量,這個(gè)函數(shù)就是個(gè)閉包. ??


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日韩黄色网 | 四虎最新网址 | 免费观看成人羞羞视频网站观看 | 亚洲欧美日韩国产综合专区 | 国产精品久久精品 | 久久天堂一区二区三区 | 老司机免费福利影院 | 怡红院免费va男人的天堂 | 亚洲国产精品aa在线看 | 亚洲精品免费日日日夜夜夜夜 | 久久综合一 | 在线亚洲成人 | 久久99精品久久久久久牛牛影视 | 夜夜骑狠狠干 | 另类图片色 | 国产成人精品亚洲一区 | 九九在线观看精品视频6 | 国产欧美亚洲精品一区 | 免费看日韩欧美一级毛片 | 国产欧美一区视频在线观看 | 久久99国产亚洲高清观看韩国 | 国产成人免费手机在线观看视频 | h视频在线观看免费网站 | 丁香婷婷六月 | 全部毛片 | 女性牲交一级毛片 | 国产精品成人四虎免费视频 | 伊人久久青草青青综合 | h在线观看免费 | 欧美视频在线网站 | 五月婷婷激情在线 | 精品无码久久久久久国产 | 饥饿游戏在线 | 视频一区亚洲 | 国产一区二区三区免费播放 | 亚洲一区二区三区久久久久 | 一级日韩 | 国产99久久九九精品免费 | 国产成人精品一区二三区2022 | 一级在线 | 欧洲 | 日韩欧美二区 |