Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,为什么这个函数进入无限循环_Python_Python 3.x - Fatal编程技术网

Python,为什么这个函数进入无限循环

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。但是,您要立即计算这些参数,这

我认为一旦x达到8并且8被打印出来,函数应该停止


非常感谢您的帮助

您的代码并没有达到您认为的效果


每次调用
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
功能之前,将计算所有内容