簡體   English   中英

Python 中 Lambda 函數的求值順序

[英]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))因為在這種情況下, a5並且blambda x:x*x ,因此(foo)(5)(lambda x:x*x)將給出625

如果是這種情況,那么為什么(bar)(bar)(625)計算結果為函數( <function bar.<locals>.<lambda> at 0x000001897D9183A8> ),而不是預期的數字625

函數在這里從左到右求值。 這是它的評估方式:

  1.  (bar)(bar)(foo)(5)(lambda x:x*x)
  2.  (bar)(foo)(5)(lambda x:x*x)
  3.  (foo)(5)(lambda x:x*x)
  4.  (lambda x:x*x)((lambda x:x*x)(5))
  5.  (lambda x:x*x)(25)
  6.  625

暫無
暫無

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

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