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

Python、Javascript中的閉包比較

系統 2062 0

同為腳本語言,python和Javascript具有相似的變量作用域,不像php,函數的內部的所有變量和外部都是隔絕的,也就是說,函數要想處理其外部的數據,必須使用參數把需要處理的數據傳遞進來(使用global關鍵詞這里不討論),而python和Javascript不同,如果在函數聲明變量,它會逐級網上查找,直到返回著個值或者未定義。

那么這樣說,python的閉包應該很簡單了,像javascript一樣,我們編寫類似的代碼:

            
def func1():
    a = 1
    def func2():
        a = a + 1
        return a
    return func2
re=func1()
print re()
print re()
          


但是,實際情況是,結果并沒有出現我們預期中的打印出2和3,反而出現了這樣的錯誤:”UnboundLocalError: local variable ‘a' referenced before assignment”(局部變量a賦值之前被引用)。為什么會出現這樣的問題,我們先看看js是如果實現這個閉包的:

            
          

上面這段代碼的運行結果如我們所料,輸入2和3。注意一下這段程序的第5行,如果我在前面加上一個var,這段程序運行的結果是什么樣的呢?最終結果是輸入了兩個“NaN”,在火狐的開發者平臺上,找到了關于var這樣的描述:

Declares a variable, optionally initializing it to a value.
The scope of a variable declared with var is the enclosing function or, for variables declared outside a function, the global scope (which is bound to the global object).

意思是說,var是用來聲明局部變量的,上面的例子中,如果用var a=a+1,這時候的a就已經是func2中的局部變量,而不會從func1中繼承,所以最后會出現NaN的結果。

讓我們回到python的這個閉包上來,這個錯誤提示的意思也是說a是個局部變量,實際上,python規定所有在賦值語句左面的變量都是局部變量,這個a在等號左邊,所以成了一個局部的變量,導致我訪問不到func1中的a。這個問題怎么解決呢?如果是在python3.0以上,在a=a+1之前,可以用nonloacal a來指定a不為局部變量。3.0以下的版本不支持nonloacal關鍵字,我們可以這樣做:

            
def func1():
    a = [1]
    def func2():
        a[0] = a[0] + 1
        return a[0]
    return func2
re=func1()
print re()
print re()


          

運行結果如我們所料,打印出了2和3。從python和Javascript閉包的例子,要了解python和js變量聲明,變量作用域的相似和不同之處。


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品欧美一区二区三区在线 | 久久一本日韩精品中文字幕屁孩 | 欧美伊人 | 欧美影院 | 成年人在线观看 | 国产在线视频一区二区 | 亚洲欧美中文日韩在线v日本 | 99热人人| 香蕉国产人午夜视频在线观看 | 亚洲9777精品毛A片久久久 | 久操欧美 | 天天碰人人 | 久久久亚洲欧洲日产国码606 | 日本免费不卡在线一区二区三区 | 欧美综合视频 | 国产精品久久久久久吹潮 | 国产精品资源网站在线观看 | 老司机午夜性大片 | 最新欧美精品一区二区三区 | 看特级毛片 | 99精品免费视频 | 九九99久久 | 1级毛片| 日韩中文字 | 一级黄色片欧美 | 久草在线精品ac | 超碰免费观看 | 国产日韩欧美在线观看不卡 | 日韩在线一区二区三区 | 欧美亚洲日本国产 | 色综合久久综合中文小说 | 青草在线观看 | 免费一级毛片 | 欧美精品九九99久久在观看 | 三级三级三级a三级三级 | 欧美一极视频 | 日日操夜夜操视频 | 欧美精品在线观看视频 | 久久婷婷色 | 久久99久久99精品免观看不卡 | 91久久精品日日躁夜夜躁国产 |