制作
lambda函数时,其引用仅在调用函数时解析为值。因此,如果您
lambda在循环中使用一个变量值(
i在您的代码中)创建函数,则每个函数都将相同
i-最后一个可用。
但是,当您使用默认参数定义函数时,在定义该函数后便会立即解析该引用。通过在
lambda函数中添加这样的参数,可以确保它们获得您想要的值。
lambda i=i: self.onClick(i)
如果您想做更多研究,这称为词汇作用域或闭包。

制作
lambda函数时,其引用仅在调用函数时解析为值。因此,如果您
lambda在循环中使用一个变量值(
i在您的代码中)创建函数,则每个函数都将相同
i-最后一个可用。
但是,当您使用默认参数定义函数时,在定义该函数后便会立即解析该引用。通过在
lambda函数中添加这样的参数,可以确保它们获得您想要的值。
lambda i=i: self.onClick(i)
如果您想做更多研究,这称为词汇作用域或闭包。