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