我用labdas编写了代码,每次创建函数对象时都会检查它是不同的(不是引用同一个对象), 但它并不像我想象的那样有效。有什么方法可以或者应该用函子来做,即使我有常量数据插入lambda的体中?在
pairs = [('abc', 'xyz'), ('123', '987'), ('abc', '987')]
pairLambs = []
for p in pairs:
pairLambs.append(lambda: print(p))
pairLambs[0]()
pairLambs[1]()
pairLambs[2]()
输出:
^{pr2}$但我需要:
('abc', 'xyz')
('123', '987')
('abc', '987')
如果您想“专门化”函数,您应该看看
functools
:这将产生您期望的结果。在
这就是python中闭包的工作原理。为了达到你想要的效果,你可以这样做:
这是一个众所周知的问题-因为在定义
lambda
时,不绑定p
的当前值,当调用它时,它使用当前值p
。解决方案是使用带有默认值的命名参数绑定p
的“当前”(定义时间)值:相关问题 更多 >
编程相关推荐