欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 丰满年轻岳中文字幕一区二区 | 日韩欧美二区 | 欧美电影免费观看 | 超91视频| 亚洲av一级毛片特黄大片 | 三级网站日本 | 青青草娱乐在线 | 国产成人禁片免费观看 | 精东视频污 | 免费的av网站| a一级免费 | 91亚洲精品成人一区 | av在线电影网站 | 欧美视频在线一区 | 久久99中文字幕 | 欧美大片在线免费观看 | 精品国产一区二区在线 | 日韩中文字幕免费在线观看 | av一区二区三区在线观看 | 99久久精品费精品国产一区二区 | 免费看91 | 亚洲一区 中文字幕 | 日本粉嫩一区二区三区视频 | 欧美成人观看 | 亚洲 欧美 日韩 综合aⅴ视频 | 国产 一区| 亚洲欧洲精品成人久久奇米网 | 色视频在线观看 | 一级视频片 | 国产97人人超碰caoprom | 人人香蕉 | 91免费在线 | 激情六月丁香婷婷 | 色图综合网 | 一级毛片免费看 | 日韩hd | 草草免费 | 嗯啊你轻点好深啊hh在线播放 | 日韩成人免费电影 | 97丨九色丨国产人妻熟女 | 日产一一到六区麻豆 |