for循环中的lambda与闭包
问题引入
z = [lambda x:x*i for i in range(3)]
x = [o(2) for o in z]
print x # [4,4,4]
f = [lambda x: x*i for i in range(3)](与x无关)
i就是在闭包作用域(enclousing),而Python的闭包是 迟绑定 , 这意味着闭包中用到的变量的值,是在内部函数被调用时查询得到的
调用结果
>>> f = [lambda x:x*i for i in range(3)]
>>> f
[<function <listcomp>.<lambda> at 0x00000237F7DECD08>, <function <listcomp>.<lambda> at 0x00000237F7DECD90>, <function <listcomp>.<lambda> at 0x00000237F7DECE18>]
>>> f[0](3)
6 # 2 * 3
>>> f[1](3)
6 # 2 * 3
>>> f[2](3)
6 # 2 * 3
>>> f[0](1)
2 # 2 * 1
>>> f[1](1)
2 # 2 * 1
>>> f[2](1)
2 # 2 * 1
当调用 func()
时,每循环一次,将 lam