python函数中非常意外的返回



在我的编程导论课上,我们在考试中有以下函数,但是最后的输出非常出乎意料。

def r2d2(a):
b = True
for k in range(len(a)):
b = b and bb8(a,k)
return b
def bb8(a,k):
a[k] = a[k]-1
return a[k] >= 0

在这个程序中,我们将a设置为:a=[1,2,3,4],并调用以下命令:

print(r2d2(a))
print(a)
print(r2d2(a))
print(a)

前三个命令的程序输出如下:

True
[0, 1, 2, 3]
False

。第四个输出是[-1, 1, 2, 3]。不应该是[-1,0,1,2]吗?

我试着操纵代码来理解原因,但是我不能想出一个解决方案。

您对如何评估语句b and bb8(a, k)感到困惑。

出于优化目的,Python甚至不会在b == False的情况下运行bb8函数,因为这样语句也必须为假。因此,一旦b变成False,bb8函数将永远不会再运行,因此a中的值不再递减。就好像这个函数已经结束了。

最新更新