[英]Order of evaluation regarding Lambda functions in Python
我有以下代碼片段:
def foo(a):
return lambda b: b(b(a))
def bar(p):
return lambda q: p(q)
n = (bar)(bar)(foo)(5)(lambda x:x*x)
print(n)
輸出是625
,但我不明白它是如何評估的,或者更確切地說,評估的順序是怎樣的。
調用堆棧是什么樣的?
我注意到(foo)(5)(lambda x:x*x)
等價於(lambda x:x*x)((lambda x:x*x)(5))
因為在這種情況下, a
是5
並且b
是lambda x:x*x
,因此(foo)(5)(lambda x:x*x)
將給出625
。
如果是這種情況,那么為什么(bar)(bar)(625)
計算結果為函數( <function bar.<locals>.<lambda> at 0x000001897D9183A8>
),而不是預期的數字625
?
函數在這里從左到右求值。 這是它的評估方式:
(bar)(bar)(foo)(5)(lambda x:x*x)
(bar)(foo)(5)(lambda x:x*x)
(foo)(5)(lambda x:x*x)
(lambda x:x*x)((lambda x:x*x)(5))
(lambda x:x*x)(25)
625
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.