你需要为创建的每个函数绑定
d。一种方法是将其作为具有默认值的参数传递:
lambda d=d: self.root.change_directory(d)
现在,函数内部的
d使用了参数,即使它具有相同的名称,并且在创建函数时会评估该参数的默认值。为了帮助你看到以下内容:
lambda bound_d=d: self.root.change_directory(bound_d)
请记住默认值是如何工作的,例如可变对象(如列表和字典)的工作原理,因为你绑定的是对象。
这种带有默认值的参数的惯用法已经足够普遍了,但是如果你对函数参数进行内省并根据其存在来确定要做什么,则可能会失败。你可以使用另一个闭包来避免使用该参数:
(lambda d=d: lambda: self.root.change_directory(d))()# or(lambda d: lambda: self.root.change_directory(d))(d)



