很多函式型的語言都有閉包這一概念,比如python的兄弟js。
人們剛聽到閉包這一概念總會覺得它很晦澀,難以理解。其實不然,主要是他的名字起得太抽象了,讓人誤以為很難。
下面舉乙個例子:
#coding:utf-8
def foo():
nums = [0]*5
for i in range(5):
nums[i] = lambda : i#這裡為nums的五個元素繫結了5個函式,函式要返回變數i的值
#顯然這裡的函式並沒有立即執行,它只是儲存了一段**而已
return nums
for func in foo():
print func()#這裡執行了儲存在nums中的各個函式,此時當這個函式接到執行命令後,它才會
#去找i這個變數,它發現本函式作用域內沒有,就到上層函式作用域中去找,結果
#找到了,它的值是4,所以本例的結果全是4
#結果:
# 4# 4
# 4# 4
# 4想要讓它返回我們期望的結果也很簡單,只要讓它在執行的時候,實時的算出結果不就可以了:
#coding:utf-8
def foo():
nums = [0]*5
for i in range(5):
nums[i] = (lambda : i)()
return nums
for num in foo():
print num
#結果:
# 0# 1
# 2# 3
# 4
python怎麼閉包 Python閉包
python閉包教程 閉包就是乙個 在閉包的記憶功能 在 python 中,獲到閉包中的變數讓閉包本身擁有了記憶效應,閉包中的邏輯可以修改閉包捕獲的變數,變數會跟隨閉包生命期一直存在,閉包本身就如同變數一樣擁有了記憶功能。python閉包定義詳解 語法def func param def func ...
python怎麼閉包 python的閉包
一 思考乙個問題 我們要給定乙個x,要求一條直線上x對應的y的值。公式是y kx b。我們需要用k,b來確定這條直線,則我們實現的函式應該有3個引數 defline k,b,x print k x b line 1,3,4 line 1,3,5 line 1,3,6 可以看到,我們每次修改x都要重新...
python 閉包的理解
1 訪問全域性變數num 1def test print num 12 修改全域性變數直接修改全域性的變數將會報錯.num 1def test num 1print num unboundlocalerror local variable num referenced before assignme...