Python,为什么这个函数进入无限循环
我认为一旦x达到8并且8被打印出来,函数应该停止Python,为什么这个函数进入无限循环,python,python-3.x,Python,Python 3.x,我认为一旦x达到8并且8被打印出来,函数应该停止 非常感谢您的帮助您的代码并没有达到您认为的效果 每次调用p时,它都会执行该方法中的代码,在您的情况下,该方法使用一些参数调用new\u if。但是,您要立即计算这些参数,这意味着在输入new\u之前,如果您的代码正在执行print(x)和p(2*x)。这会导致p再次被调用,并重复该过程。您的代码不会执行您认为它会执行的操作 每次调用p时,它都会执行该方法中的代码,在您的情况下,该方法使用一些参数调用new\u if。但是,您要立即计算这些参数,这
非常感谢您的帮助您的代码并没有达到您认为的效果
每次调用
p
时,它都会执行该方法中的代码,在您的情况下,该方法使用一些参数调用new\u if
。但是,您要立即计算这些参数,这意味着在输入new\u之前,如果您的代码正在执行print(x)
和p(2*x)
。这会导致p
再次被调用,并重复该过程。您的代码不会执行您认为它会执行的操作
每次调用p
时,它都会执行该方法中的代码,在您的情况下,该方法使用一些参数调用new\u if
。但是,您要立即计算这些参数,这意味着在输入new\u之前,如果您的代码正在执行print(x)
和p(2*x)
。这会导致p
再次被调用,并重复该过程。您认为代码的计算方式似乎存在一些普遍的混乱:特别是,您认为的谓词和子句实际上不是。如果
,则在调用new\u之前计算参数。因此,您几乎在调用p
时立即计算p(2*x)
,从而得到对p
的无限递归调用
您可以通过传递函数来实现所需的功能,然后在new\u if
函数中对这些函数进行求值。这可以通过lambda函数实现,如下所示:
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)
在这种情况下,pred
、then_子句
、else_子句
都是可调用的,您需要调用(()
)才能执行它们。在如何评估代码方面似乎存在一些普遍的混淆:特别是,您认为的谓词和子句实际上不是。如果
,则在调用new\u之前计算参数。因此,您几乎在调用p
时立即计算p(2*x)
,从而得到对p
的无限递归调用
您可以通过传递函数来实现所需的功能,然后在new\u if
函数中对这些函数进行求值。这可以通过lambda函数实现,如下所示:
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)
在这种情况下,pred
,then_子句
,else_子句
是需要调用的可调用项(()
)用于执行它们。x>5
…您试图传递什么?为什么要在参数中传递print函数?当我使用python tutor时,我发现1,2,4,8,并打印出以下内容..无限循环..p(2*x)
在新的函数i之外求值think@SunWeiran没有,在输入new_if
函数x>5
之前,所有内容都会进行计算。您试图传递什么?为什么要在参数中传递print函数?当我使用python教程时,我发现1,2,4,8,并打印出以下内容。.无限循环。p(2*x)
在新的_if函数i之外求值think@SunWeiran没有,在输入new\u if
功能之前,将计算所有内容