为什么在具有不同值的循环中定义的lambdas都返回相同的结
原始代码:squares〔〕forxinrange(5):squares。append(lambda:x2)foriinrange(5):print(squares〔i〕(),end)1616161616期望,当它们被调用时,它们将分别返回0、1、4、9和16发生这种情况是因为x不是lambdas的内部变量,而是在外部作用域中定义,并且在调用lambda时访问它而不是在定义它时。在循环结束时,x的值是4,所以所有的函数现在返回42,即16为了避免这种情况,你需要将值保存在lambdas的局部变量n中,这样它们就不依赖于全局x的值squares〔〕forxinrange(5):squares。append(lambdanx:n2)foriinrange(5):print(squares〔i〕(),end)014916其他类似的示例代码:defmultipliers1():return〔lambdax:ixforiinrange(4)〕print(〔m(2)forminmultipliers1()〕)输出〔6,6,6,6〕defmultipliers2():return〔lambdax,yi:xyforiinrange(4)〕print(〔m(2)forminmultipliers2()〕)输出〔0,2,4,6〕