def fun():
# return (lambda x: x * i for i in range(4)) # 结果是[0,2,4,6]
return [lambda x: x * i for i in range(4)]
预期结果应该是[0,2,4,6],但确是[6, 6, 6, 6]
print([m(2) for m in fun()])
-----------------------------------------------------------------------------------------------------
可以把上述 匿名函数+列表推导式 转换为下种格式,生成了4次6
li = []
return li
for fun in funcs():
print(fun(2))
funcs函数里面形成了一个闭包
闭包的两个特性:
①、内部函数使用外部函数的变量(不对外部函数的变量进行重新赋值)
②、外部函数 return 内部函数的函数名(其实是返回内部函数的内存地址)
# return (lambda x: x * i for i in range(4)) # 结果是[0,2,4,6]
return [lambda x: x * i for i in range(4)]
预期结果应该是[0,2,4,6],但确是[6, 6, 6, 6]
print([m(2) for m in fun()])
-----------------------------------------------------------------------------------------------------
可以把上述 匿名函数+列表推导式 转换为下种格式,生成了4次6
li = []
def funcs():
for i in range(4):
def func(x):return x * i
li.append(func)return li
for fun in funcs():
print(fun(2))
funcs函数里面形成了一个闭包
闭包的两个特性:
①、内部函数使用外部函数的变量(不对外部函数的变量进行重新赋值)
②、外部函数 return 内部函数的函数名(其实是返回内部函数的内存地址)