执行时,代码出乎意料地打印: mi mi 做 关于 mi
,而不是预期的输出:理解lambda函数及其参数的范围至关重要。与常规功能不同,lambda功能引用了创建它们的周围环境。该引用包括Lambda主体内使用的变量。
在不正确的方法中使用迭代器时,对于循环中的每个元素m,它会创建一个新的lambda函数,引用相同的变量m。但是,循环完成后,变量m引用循环中的最后一个元素,即“ mi”。因此,当执行回调函数时,它们都使用更新的引用。解决此问题的解决方案可以捕获lambda函数的lambda函数的值for IT作为deveault of optional参数(a optional参数),我们可以捕获lambda函数的值
。 're','mi'): Funclist.Append(lambda m = m:callback(m))现在,在每个lambda函数中,m被捕获为局部变量,并且在循环完成时将其值保留。因此,当执行回调函数时,它们会打印正确的值,从而产生预期的输出。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3