2015-12-14 165 views
-1

我正在關注David Mertz的一本書「功能性python編程」,我遇到了以下一段代碼。python:遞歸lambda表達式

def echo_IMP(): 
    while 1: 
     x = raw_input("IMP -- ") 
     if x == 'quit': 
      break 
     else: 
      print(x) 

以上代碼的功能版本似乎是這樣的:

def identity_print(x): 
    print(x) 
    return x 


echo_FP = lambda: identity_print(raw_input("IMP -- "))=='quit' or echo_FP() 
echo_FP() 

這怎麼identity_print()被再次叫什麼名字?

這是什麼or表達式實際上在做什麼?

回答

1
echo_FP = lambda: identity_print(raw_input("IMP -- "))=='quit' or echo_FP() 

執行的順序是:

  1. raw_input("IMP -- ")回報用戶輸入(讓我們在input調用)原始輸入的
  2. 結果去identity_print(input) - 它打印input並返回
  3. 的該功能的其餘部分是input=='quit' or echo_FP()A or B的工作方式是: if A: return A else: return B

    所以,如果input=='quit'(即A),它返回true,到此爲止,否則整個拉姆達再次執行(echo_FP())。

0

您正在創建一個內部具有一些條件的函數。換句話說,你說「叫identity_print,如果結果是‘退出’:條件進行驗證,如果沒有:再次打電話給我」

echo_FP功能:

echo_FP = lambda: identity_print(raw_input("IMP -- "))=='quit' or echo_FP() 

有這種行爲:

def echo_FP(): 

    var = identity_print(input("IMP -- ")) 

    if var == 'quit': 
     pass 
    else: 
     echo_FP() 

遞歸來當identity_print沒有回報quit因爲函數執行or條件這是echo_FP

呼叫
0

在這裏,我們定義了一個lambda函數沒有實際投入,但聲明實際上是一個函數調用identity_print() ..whose輸入由用戶輸入。這就是爲什麼我們這樣稱呼它是這樣的echo_FP()沒有輸入。

根據'或'運算符的功能,它將搜索第一個正確匹配。所以在這種情況下,如果用戶輸入'quit'以外的任何東西,那麼第一次匹配失敗(identity_print(raw_input(「IMP - 」))=='quit將導致False),所以它執行並執行echo_FP() 。所以直到用戶繼續輸入「退出」以外的任何內容時,它將繼續呼叫echo_FP()。你進入'退出'的那一刻它會返回真實並從中出來。

enter image description here