在我的编程导论课上,我们在考试中有以下函数,但是最后的输出非常出乎意料。
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
中的值不再递减。就好像这个函数已经结束了。