下面的输出结果全是18
def testFun(): temp = [lambda x : i*x for i in range(10)] return temp for everyLambda in testFun(): print(everyLambda(2))
解:
因为python中变量是先定义再引用,而lambda匿名函数又是全执行完了再引用,所以引用的值(i)全是最后一个(9)
加一个默认参数
def testFun(): temp = [lambda x,i=i : i*x for i in range(10)] return temp for everyLambda in testFun(): print(everyLambda(2))
加了默认参数之后,python解释器每遇到默认参数时,都会初始化默认参数(i),这样,每循环一次,i就被引用一次。
持续更新遇到的问题