在调用函数时,已获得计算结果
将函数赋值给变量,需要计算时,再次执行变量指向的函数
上图中,内部函数可以访问外部函数的变量args,相关参数都已保存在返回的内部函数中,称之为闭包
在执行f1(),f2(),f3()函数调用时,内部函数才开始执行,获取的外部变量是已经循环过的i,即3
所以三个输出都为9
解决方案:在内部函数外层再建一个函数包裹,将i通过参数形式传入,可以起到保存参数的作用
个人理解,在执行53行append语句时,执行f_out(i),该函数马上执行,传入参数就是此时的i,内部函数取用时,就是之前传入的i
所以不要在内部函数引用外部循环变量,改用函数传参形式
用一定的简写形式,用匿名函数lambda替换f()
限制:只能有一个表达式,返回值就是该表达式的运算结果
lambda,等效写法
无参数写法
所以上面闭包简化时所用得匿名函数无参数写法