我向一些python的前辈询问他们对以下代码片段的看法: 对于许多人(包括我自己),第一次遇到此问题时,我们认为结果将是:
但是,实际上代码最终打印了完全不同的结果,我们对为什么感到非常困惑。原来是Python会执行后期绑定行为,根据该行为,在调用内部函数时会查询闭包中使用的变量的值。因此,在我们的示例中,每当调用任何返回的函数时,都会在调用i时在周围的范围中查找的值。解决此问题的方法似乎有些棘手,但实际上却很有效
通过使用lambda函数的默认参数传递值,i可以生成函数以执行所需的行为。我对这种解决方案感到非常困惑,但我仍然认为它不是很优雅,但是有些人喜欢它。如果你知道该问题的另一种解决方案,请您在评论中让我知道,我很乐意阅读有关该问题的信息。
希望你们尽量少出现编码错误,哈哈哈。2020.6.24
|