Python新手如何進(jìn)行閉包時綁定變量操作
搞不清楚在閉包(closures)中Python是怎樣綁定變量的
看這個例子:
>>> def create_multipliers():... return [lambda x : i * x for i in range(5)]>>> for multiplier in create_multipliers():... print multiplier(2)...
期望得到下面的輸出:
0
2
4
6
8
但是實(shí)際上得到的是:
8
8
8
8
8
實(shí)例擴(kuò)展:
# coding=utf-8__author__ = ’xiaofu’# 解釋參考 http://docs.python-guide.org/en/latest/writing/gotchas/#late-binding-closuresdef closure_test1(): ''' 每個closure的輸出都是同一個i值 :return: ''' closures = [] for i in range(4):def closure(): print('id of i: {}, value: {} '.format(id(i), i)) closures.append(closure) # Python’s closures are late binding. # This means that the values of variables used in closures are looked up at the time the inner function is called. for c in closures: c()def closure_test2(): def make_closure(i): def closure(): print('id of i: {}, value: {} '.format(id(i), i)) return closure closures = [] for i in range(4): closures.append(make_closure(i)) for c in closures: c()if __name__ == ’__main__’: closure_test1() closure_test2()
輸出:
id of i: 10437280, value: 3 id of i: 10437280, value: 3 id of i: 10437280, value: 3 id of i: 10437280, value: 3 id of i: 10437184, value: 0 id of i: 10437216, value: 1 id of i: 10437248, value: 2 id of i: 10437280, value: 3
到此這篇關(guān)于Python新手如何進(jìn)行閉包時綁定變量操作的文章就介紹到這了,更多相關(guān)Python閉包時綁定變量實(shí)例內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. jsp+servlet實(shí)現(xiàn)猜數(shù)字游戲2. asp讀取xml文件和記數(shù)3. JSP+Servlet實(shí)現(xiàn)文件上傳到服務(wù)器功能4. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案5. jsp實(shí)現(xiàn)textarea中的文字保存換行空格存到數(shù)據(jù)庫的方法6. JSP之表單提交get和post的區(qū)別詳解及實(shí)例7. UDDI FAQs8. ASP常用日期格式化函數(shù) FormatDate()9. 將properties文件的配置設(shè)置為整個Web應(yīng)用的全局變量實(shí)現(xiàn)方法10. CSS可以做的幾個令你嘆為觀止的實(shí)例分享
