python闭包怎么理解_Python:闭包的理解
很多函數(shù)型的語言都有閉包這一概念,比如python的兄弟js。
人們剛聽到閉包這一概念總會覺得它很晦澀,難以理解。其實不然,主要是他的名字起得太抽象了,讓人誤以為很難。
下面舉一個例子:
#coding:utf-8
def foo():
nums = [0]*5
for i in range(5):
nums[i] = lambda : i#這里為nums的五個元素綁定了5個函數(shù),函數(shù)要返回變量i的值
#顯然這里的函數(shù)并沒有立即執(zhí)行,它只是保存了一段代碼而已
return nums
for func in foo():
print func()#這里執(zhí)行了保存在nums中的各個函數(shù),此時當這個函數(shù)接到執(zhí)行命令后,它才會
#去找i這個變量,它發(fā)現(xiàn)本函數(shù)作用域內(nèi)沒有,就到上層函數(shù)作用域中去找,結(jié)果
#找到了,它的值是4,所以本例的結(jié)果全是4
#結(jié)果:
# 4
# 4
# 4
# 4
# 4
想要讓它返回我們期望的結(jié)果也很簡單,只要讓它在執(zhí)行的時候,實時的算出結(jié)果不就可以了:
#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
#結(jié)果:
# 0
# 1
# 2
# 3
# 4
總結(jié)
以上是生活随笔為你收集整理的python闭包怎么理解_Python:闭包的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷组删除pv_如何安全的删除Linux
- 下一篇: css 查看更多_在Scrapy中如何利