欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

什么是閉包及Python中的閉包

系統(tǒng) 1611 0

什么是閉包

Objects are data with methods attached. Closures are functions with data attached.

一般來說,我們都非常熟悉面向對象(OOD)語言中的對象的概念。所謂對象(Object),指的是附帶相應方法的__數據__。那么相對而言,閉包(closure)指的則是附帶相應數據的__函數__。換句話說,閉包函數能夠引用一些并不在當前代碼全局上下文中定義的變量。這些被引用的變量(稱為自由變量)是在閉包函數被定義的位置的所在的代碼中定義的。這樣的一些函數被稱為閉包。

Python中的閉包

由于在Python中,函數也是第一類對象,所以與字符串,數字或其他任何我們所熟悉的對象一樣,函數也可以被賦值給一個變量,作為另一個函數的返回值,或作為一個輸入參數傳遞給另一個函數。這就使得定義閉包非常的方便,如下面的例子所示。

            
              
                def
              
              
                constant_adder
              
              
                (
              
              x
              
                )
              
              
                :
              
              
    constant 
              
                =
              
               x
    
              
                def
              
              
                adder
              
              
                (
              
              y
              
                )
              
              
                :
              
              
        y 
              
                =
              
               y 
              
                +
              
               constant
        
              
                return
              
               y
    
              
                return
              
               adder


              
                # Given the above function
              
              
                >>
              
              
                >
              
               f1 
              
                =
              
               constant_adder
              
                (
              
              
                1
              
              
                )
              
              
                >>
              
              
                >
              
               f1
              
                (
              
              
                2
              
              
                )
              
              
                >>
              
              
                >
              
              
                3
              
              
                >>
              
              
                >
              
               f2 
              
                =
              
               constant_adder
              
                (
              
              
                10
              
              
                )
              
              
                >>
              
              
                >
              
               f2
              
                (
              
              
                2
              
              
                )
              
              
                >>
              
              
                >
              
              
                12
              
            
          

在上述例子中,我們可以發(fā)現(xiàn)在調用 f1 f2 的時候, constant_adder 的作用域事實上已經結束。這里的 constant 就是一個自由變量,我們仍然在 f1 f2 中調用了在 constant_adder 中的定義的 constant 變量,這就是一個附帶相應數據的函數。

另外,在Python3.x以前,我們只能在閉包中取得自由變量的值,但無法改變自由變量的值。重新賦值自由變量的行為將會導致一個作用域為當前函數的局部變量的產生。Python3.0引入了 nonlocal 關鍵字,使得我們不僅能夠讀取自由變量,也能夠重新賦值自由變量。如下面的例子所示。

            
              
                def
              
              
                foo
              
              
                (
              
              
                )
              
              
                :
              
              
    x 
              
                =
              
              
                1
              
              
                def
              
              
                show
              
              
                (
              
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                "x is {}"
              
              
                .
              
              
                format
              
              
                (
              
              x
              
                )
              
              
                )
              
              
                def
              
              
                change
              
              
                (
              
              
                )
              
              
                :
              
              
                nonlocal
              
               x
        x 
              
                =
              
              
                2
              
              
                return
              
               show
              
                ,
              
               change


              
                # Given the above function
              
              
                >>
              
              
                >
              
               show
              
                ,
              
               change 
              
                =
              
               foo
              
                (
              
              
                )
              
              
                >>
              
              
                >
              
               show
              
                (
              
              
                )
              
              
                >>
              
              
                >
              
               x 
              
                is
              
              
                1
              
              
                >>
              
              
                >
              
               change
              
                (
              
              
                )
              
              
                >>
              
              
                >
              
               show
              
                (
              
              
                )
              
              
                >>
              
              
                >
              
               x 
              
                is
              
              
                2
              
            
          

Reference
https://stackoverflow.com/questions/13857/can-you-explain-closures-as-they-relate-to-python
http://mrevelle.blogspot.com/2006/10/closure-on-closures.html


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩中文字幕在线视频 | 久草视频在线资源 | 欧美一区二区三区四区五区 | 欧美性黑人极品 hd 无码一区二区三区曰本A片 | 欧美黄色一区 | 免费视频拗女稀缺一区二区 | 亚洲一区二区在线视频 | 男人激烈吮乳动态图 | 波多野结衣手机视频一区 | 日韩国产在线 | 国产免费观看一级国产 | 国产苐1页影院草草影院 | 免费高清欧美一区二区视频 | 一级毛片免费播放视频 | 色吊丝国产 | 日本天天操 | 四虎永久免费网站入口2020 | 亚洲福利 | 国产在线精品一区二区高清不卡 | 成人免费在线视频网站 | 色a综合| 国产精品福利在线观看免费不卡 | 免费看a网站 | 国产成人手机在线好好热 | 久久一区二区精品综合 | 91青青草视频在线观看 | 日本在线观看 | 成人欧美一区二区三区 | 精品国产一区二区三区久久久 | 国产在线观看一区二区 | 欧美久久综合 | 美女福利视频国产免费观看 | 国产综合久久 | 狠狠色婷婷丁香六月 | 天天天天综合 | 不卡国产一区二区三区四区 | 亚洲一区电影 | a级欧美片免费观看 | 午夜专区 | 国产精品一区二区免费 | 五月婷婷丁香 |