欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 色拍拍欧美视频在线看 | 天天爱天天爽 | 嗯啊你轻点好深啊hh在线播放 | 欧美色无极 | 91在线免费视频 | 久久激情综合色丁香 | 99综合| 亚洲欧美第一页 | 人人爱人人草 | 欧美精品一区二区在线观看 | 超级碰碰碰频视频免费观看 | 欧美午夜视频 | 青娱分类视频精品免费2 | 黄色视频a级毛片 | 91久久国产综合久久 | 黄色小视频在线看 | 国产精品乱码一区二三区小蝌蚪 | 色呦呦免费 | 色综合久久久久久久久五月性色 | 国产欧美精品一区二区 | 中文字幕无线码一区二区三区 | 久久这里只有精品99 | 国产精品成在线观看 | 国产精品xxxav免费视频 | 一级毛片观看 | 欧美亚洲香蕉 | 三级视频在线播放 | 一区二区三区欧美精品 | 亚洲欧美激情四射 | 亚洲欧洲精品一区二区 | 日韩成人在线观看视频 | 精品免费国产一区二区三区 | 欧日韩在线视频 | 欧美一级毛片欧美毛片视频 | 激情亚洲综合网 | jiucao在线看片www | 在线视频成人 | 欧美一级视频在线观看欧美 | 精品久久久久久久久久 | 丁香久久 | 91短视频在线高清hd |