以下代碼片段演示了嵌套 lambda 列表僅計(jì)算原始 lambda 列表的最后一個(gè)元素。eqs_test = [ (lambda x: f"0"), (lambda x: f"1"), (lambda x: f"2"), (lambda x: f"3"),]# unexpected outputprint([a(1) for a in [ lambda x: f"{e1(0)}-{e2(0)}" for e1, e2 in zip(eqs_test[1:], eqs_test[:-1])]])# expected output (no outer lambda used here for testing)print([a for a in [ f"{e1(0)}-{e2(0)}" for e1, e2 in zip(eqs_test[1:], eqs_test[:-1])]])輸出是:['3-2', '3-2', '3-2']['1-0', '2-1', '3-2']我希望在這兩種情況下都有第二個(gè)輸出,但不知何故,lambda 沒(méi)有正確存儲(chǔ)(3-2只是最后生成的 lambda)。這里發(fā)生了什么以及如何以運(yùn)行正確的嵌套 lambda 的方式存儲(chǔ)外部 lambda?
1 回答

紅糖糍粑
TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
為了使第一個(gè)示例正常工作,請(qǐng)將變量存儲(chǔ)為 lambda 參數(shù)。否則,lambda 將始終打印e1和的最后一個(gè)值e2:
eqs_test = [
(lambda x: f"0"),
(lambda x: f"1"),
(lambda x: f"2"),
(lambda x: f"3"),
]
# unexpected output
print([a(1) for a in [
lambda x, e1=e1, e2=e2: f"{e1(0)}-{e2(0)}" for e1, e2 in zip(eqs_test[1:], eqs_test[:-1])
]])
印刷:
['1-0', '2-1', '3-2']
添加回答
舉報(bào)
0/150
提交
取消