在JavaScript中有闭包的概念,python的闭包如出一辙
把一个函数作为返回值
下面有个小栗子
>>> def lazy_sum(*arge):
... def sum():
... ax = 0
... for n in arge:
... ax = ax + n
... return ax
... return sum
...
>>> f = lazy_sum(1,3,5,7,9)
>>> f
<function lazy_sum.<locals>.sum at 0x103e346a8>
>>> f()
25
在我们调用lazy_sum()函数时实际返回的是一个Iterator 我们再次调用f()函数才会显示结果。这就是闭包
作业
练习
利用闭包返回一个计数器函数,每次调用它返回递增整数:
#_*_ coding:utf-8 _*_
#使用闭包创建一个递增的函数
def createCounter():
def _all_iter(): #创建一个自然数序列,Iterator
n = 1
while True:
yield n
n = n + 1
it = _all_iter()
def counter():
return next(it)
return counter
counterA = createCounter()
print(counterA(),counterA(),counterA(),counterA(),counterA())
counterB = createCounter()
if [counterB(),counterB(),counterB(),counterB()] == [1,2,3,4]:
print('测试通过')
else:
print('测试失败')