Python新手如何進行閉包時綁定變量操作
搞不清楚在閉包(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
但是實際上得到的是:
8
8
8
8
8
實例擴展:
# 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
到此這篇關于Python新手如何進行閉包時綁定變量操作的文章就介紹到這了,更多相關Python閉包時綁定變量實例內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: