我有代码与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]()
Run Code Online (Sandbox Code Playgroud)
输出:
('abc', '987')
('abc', '987')
('abc', '987')
Run Code Online (Sandbox Code Playgroud)
但是我需要:
('abc', 'xyz')
('123', '987')
('abc', '987')
Run Code Online (Sandbox Code Playgroud)
bru*_*ers 10
这是一个众所周知的问题 - 因为你没有绑定p定义lambda时的当前值,当调用它时使用的当前值p.解决方案是使用带有默认值的命名arg来绑定"当前"(定义时间)值p:
pairs = [('abc', 'xyz'), ('123', '987'), ('abc', '987')]
pairLambs = []
for p in pairs:
pairLambs.append(lambda p=p: print(p))
pairLambs[0]()
pairLambs[1]()
pairLambs[2]()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |