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打印出來。Python,爲什麼這個函數進入死循環
非常感謝幫助
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打印出來。Python,爲什麼這個函數進入死循環
非常感謝幫助
您的代碼不會做你認爲它。
每當您撥打p
它會執行該方法中的代碼,在您的情況下,該代碼將使用一些參數調用new_if
。但是,您立即評估這些參數,這意味着在輸入new_if
之前,您的代碼正在執行print(x)
和p(2*x)
。這導致p
再次被調用,重複該過程。
瞭解,感謝幫助的人! – 2014-11-24 15:31:26
在你如何評估代碼的過程中似乎存在一些普遍的混淆:特別是,你認爲謂詞和子句真的不是。在之前評估參數,調用new_if
。因此,您可以通過p
進行無限遞歸調用,幾乎在您撥打p
後立即評估p(2*x)
。
您可以通過傳遞函數來實現您想要的功能,然後您可以在您的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
都是你需要調用(()
)爲他們執行可調用。
'x> 5' ...你想通過什麼? – rnevius 2014-11-24 15:24:42
爲什麼你在參數中傳遞打印函數? – 2014-11-24 15:24:52
因爲我使用蟒蛇導師,我發現1,2,4,8和以下打印out..infinite循環.. – 2014-11-24 15:25:34