函数的闭包
def add(x,y):
return x + y
add(2,1)
# 转换下
>>> def add(x):
>>> def _add(y):
>>> return x + y
>>> return _add
>>> foo = add(2)
>>> type(foo)
<class 'function'>
>>> print(add(2)(1))
3
闭包和生成器结合
def func(x,*args):
do_some = x + 1
def func_inner(z):
f = z**2 + do_some
return f
return func_inner
#定义一个生成器
args = {
"start":0,
"end":10,
"step":1} #定义初始参数
def generator(list_ = None,**kwargs):
start = kwargs['start']
end = kwargs['end']
step = kwargs['step']
number = start
while number < end:
x = list_[number]
yield func(x) #这里初始化一个函数,其实也可以初始化一个类对象
number += step
#初始化一个生成器
generator_funcs = generator(list_=[i for i in range(10)],**args)
#迭代生成器
fo = [i for i in range(10)]
results = []
for i,func_ in enumerate(generator_funcs):
output = func_(fo[i])
results.append(output)
print(results)
[1, 3, 7, 13, 21, 31, 43, 57, 73, 91]