歡迎您光臨本站 註冊首頁

Python新手如何進行閉包時綁定變量操作

←手機掃碼閱讀     sl_ivan @ 2020-06-03 , reply:0

搞不清楚在閉包(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-closures def 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



[sl_ivan ] Python新手如何進行閉包時綁定變量操作已經有247次圍觀

http://coctec.com/docs/python/shhow-post-236810.html