[英]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)
在這種情況下, pred
, then_clause
, else_clause
都是你需要調用可調用( ()
為他們執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.