簡體   English   中英

Python,為什么這個函數會陷入無限循環

[英]Python, why does this function go into an infinite loop

def new_if (pred,then_clause,else_clause):

    if pred:
        then_clause
    else:
        else_clause

def p(x):
    new_if(x>5,print(x),p(2*x))

p(1)

我認為該功能應該在x達到8並打印8時停止。

非常感謝您的幫助

您的代碼沒有執行您認為的操作。

每次調用p它都會執行該方法中的代碼,在您的情況下,該方法將使用一些參數調用new_if 但是,您將立即評估這些參數,這意味着在輸入new_if之前, new_if您的代碼正在執行print(x)p(2*x) 這導致p被再次調用,重復該過程。

在您如何看待代碼評估方面似乎存在一些普遍的困惑:特別是,您認為謂詞和從句實際上並沒有。 在調用new_if 之前先評估參數。 因此,通過幾乎在調用p求值p(2*x) ,就可以p進行無限遞歸調用。

您可以通過傳遞函數來實現所需的目標,然后在new_if函數中對其進行new_if值。 可以使用lambda函數完成此操作,如下所示:

def new_if (pred,then_clause,else_clause):
    if pred():
        then_clause()
    else:
        else_clause()

def p(x):
    new_if(lambda: x>5, lambda: print(x), lambda: p(2*x))

p(1)

在這種情況下, predthen_clauseelse_clause都是你需要調用可調用( ()為他們執行。

暫無
暫無

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

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