list = [lambda x : x*i for i in range(4)]
res = [m(2) for m in list]
print(res)
求res的打印值:
输出结果:[6,6,6,6]
例题中还可以这样写
def func():
foo_list = []
for i in range(4):
def foo(x):
return x*i
foo_list.append(foo)
return foo_list
for m in func():
print(m(2))
因为i是for循环最后一个i,i的值没有保存,所以是[6,6,6,6]
我们可以对上面例题再做一下改变:
list = [lambda x,i=i : x*i for i in range(4)]
res = [m(2) for m in list]
print(res)
我们看下打印结果:[0,2,4,6]
然后给他写成普通函数形式的
def func():
foo_list = []
def foo(x,i):
return x*i
foo_list.append(foo)
return foo_list
for m in func():
print(m(2))
这次他把循环中的i当做参数传进来了,所以能获取到循环中的i。