多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 概述 lambda 是一个表达式,而不是一个语句。 `lambda args:expression` ## 嵌套作用域和lambda ~~~python def func(): x = 4 action = (lambda n, y=x: y ** n) return action x = func() print(x(2)) --> 16 ~~~ 参考之前的作用域介绍,需要使用默认参数**从上层作用域将值传递给**lambda ```python def func(): x = 4 action = (lambda n, y=x: y ** n) return action x = func() print(x(2)) --> 16 ``` ## 作用域与带有循环变量的默认参数相比较 >[danger]特例 如果lambda或者def在函数中定义,嵌套在一个循环之中,并且嵌套的函数引用了上层作用域的变量,该变量被循环所改变,所有这个循环中产生的函数将有相同的值,即最后一个循环完成时被引用变量的值 ```python def makeActions(): acts = [] for i in range(5): acts.append(lambda x: i ** x) return acts ``` 分析,i从0迭代到4,最终i = 4 测试结果 ``` acts = makeActions() acts[0](2) acts[2](2) acts[4](2) 都等于16 ``` 为了让这类代码能够工作,必须使用默认参数把当前值传递给嵌套作用域中的变量,@p432 ```python def makeActions(): acts = [] for i in range(5): acts.append(lambda x, y=i: y ** x) return acts ``` 测试结果 ``` acts = makeActions() acts[0](2) --> 0 acts[2](2) --> 4 acts[4](2) --> 16 ```