当我错误地缩进“ return”时会发生什么情况

时间:2019-07-02 15:58:31

标签: python

这是返回我期望值的代码:

python

def function1():
    highest = 0
    for x in range(100):
        for y in range(100):
            if x+y > highest:
                highest = x+y
    return highest

print(function1())

此代码显示“ 198”。

现在,如果我在if语句下缩进return语句,就像这样:

def function1():
    highest = 0
    for x in range(100):
        for y in range(100):
            if x+y > highest:
                highest = x+y
                return highest

print(function1())

代码显示为“ 1”。

为什么?幕后发生了什么?

很抱歉,如果这是一个琐碎的问题,但不了解其基本结构和内容,我只是通过实验来学习...

4 个答案:

答案 0 :(得分:0)

return语句在您调用它时停止循环。因此,在第一个示例中,它遍历整个for循环,然后返回highest的值。在第二个示例中,它在for循环的第一个条目上返回,因此不会遍历整个for循环。

答案 1 :(得分:0)

它在第二个循环的第二步中终止。

highest = 0
x = 0
y = 0

if 0+0 > 0 (false):
    increment y to 1:

第二次运行:

highest = 0
x = 0
y = 1
if 0+1 > 0 (true)
    highest = 1
    return # return command is called and therefore the execution of the function ends

return语句结束函数调用的执行并“返回”结果。

答案 2 :(得分:0)

一条int id = comboBox.SelectedValue; 语句结束了该功能。如果将其放在return语句中,则条件成立时该函数将立即停止。因此,它将返回比if大的x+y的第一个值,这种情况发生在0x = 0时,而不是继续寻找更高的值。

答案 3 :(得分:0)

在第一个示例中,return语句在两个for循环下面,但在两个循环之外也都缩进了。这意味着,直到对forx的每种可能组合都对嵌套的y循环表达式进行求值为止。

另一方面,在第二个示例中,return语句内缩进了if。到达if语句后,Python解释器将读取在该级别缩进的所有行,包括return highest。因此,第一次x+y > highest(即x+y==1时,if语句运行,并且该函数返回1。该返回值是一个早期中断,因此即使会有更多的值可以处理,没关系,因为您明确要求它早日返回。