簡體   English   中英

嵌套 lambda 的 Python 列表僅執行 lambda 列表的最后一個元素

[英]Python list of nested lambdas executes last element of lambda list only

以下代碼片段演示了嵌套 lambda 列表僅計算原始 lambda 列表的最后一個元素。

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: 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']

我希望在這兩種情況下都有第二個輸出,但不知何故 lambda 沒有正確存儲( 3-2只是最后生成的 lambda)。 這里發生了什么,我如何以運行正確嵌套 lambda 的方式存儲外部 lambda?

要使第一個示例工作,請將變量存儲為 lambda 參數。 否則,lambda 將始終打印e1e2最后一個值:

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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM